geometry.h
author insilmaril
Tue, 08 Sep 2009 12:15:39 +0000
changeset 792 7d67be709091
parent 789 d85834ad8c54
child 798 d251c7b2de54
permissions -rw-r--r--
First results in moving colliding MapCenters apart
insilmaril@789
     1
#ifndef GEOMETRY
insilmaril@789
     2
#define GEOMETRY
insilmaril@650
     3
insilmaril@656
     4
#include <QPolygonF>
insilmaril@650
     5
insilmaril@650
     6
QRectF addBBox(QRectF r1, QRectF r2);
insilmaril@754
     7
bool isInBox(const QPointF &p, const QRectF &box);
insilmaril@650
     8
insilmaril@792
     9
insilmaril@792
    10
class Vector:public QPointF
insilmaril@792
    11
{
insilmaril@792
    12
public:
insilmaril@792
    13
	Vector ();
insilmaril@792
    14
	Vector (const QPointF &p);
insilmaril@792
    15
	Vector (qreal x, qreal y);
insilmaril@792
    16
insilmaril@792
    17
	friend inline bool operator==(const Vector &v1, const Vector &v2 )
insilmaril@792
    18
	{ return v1.x()==v2.x() && v1.y()==v2.y(); }
insilmaril@792
    19
insilmaril@792
    20
	virtual void normalize ();
insilmaril@792
    21
	virtual qreal dotProduct (const QPointF &b);
insilmaril@792
    22
	virtual void scale  (const qreal &f);
insilmaril@792
    23
	virtual void invert ();
insilmaril@792
    24
};
insilmaril@792
    25
insilmaril@789
    26
class ConvexPolygon:public QPolygonF
insilmaril@789
    27
{
insilmaril@789
    28
public:
insilmaril@789
    29
	ConvexPolygon ();
insilmaril@789
    30
	ConvexPolygon (QPolygonF p);
insilmaril@789
    31
	void calcCentroid() ;
insilmaril@789
    32
	QPointF centroid() const;
insilmaril@789
    33
	qreal weight() const;
insilmaril@792
    34
	std::string toStdString ();
insilmaril@792
    35
	Vector at (const int &i) const ; 
insilmaril@792
    36
	virtual void translate ( const Vector &offset );
insilmaril@792
    37
	virtual void translate ( qreal dx, qreal dy );
insilmaril@789
    38
private:
insilmaril@792
    39
	Vector _centroid;
insilmaril@789
    40
	qreal _area;
insilmaril@789
    41
};
insilmaril@789
    42
insilmaril@662
    43
class PolygonCollisionResult {
insilmaril@662
    44
public:
insilmaril@662
    45
    // Are the polygons going to intersect forward in time?
insilmaril@662
    46
    bool willIntersect;
insilmaril@662
    47
insilmaril@662
    48
    // Are the polygons currently intersecting?
insilmaril@662
    49
    bool intersect;
insilmaril@662
    50
insilmaril@662
    51
    // The translation to apply to the first polygon to push the polygons apart.
insilmaril@662
    52
    QPointF minTranslation;
insilmaril@662
    53
};
insilmaril@662
    54
insilmaril@662
    55
insilmaril@792
    56
void projectPolygon(Vector axis, ConvexPolygon polygon, qreal &min, qreal &max) ;
insilmaril@789
    57
insilmaril@662
    58
qreal intervalDistance(qreal minA, qreal maxA, qreal minB, qreal maxB);
insilmaril@792
    59
PolygonCollisionResult polygonCollision(ConvexPolygon polygonA, 
insilmaril@792
    60
                              ConvexPolygon polygonB, Vector velocity);
insilmaril@662
    61
insilmaril@789
    62
#endif