geometry.h
author insilmaril
Sat, 06 Mar 2010 20:05:02 +0000
changeset 826 e715694b0f47
parent 824 36eb4b8f409e
child 835 31841b366d5e
permissions -rw-r--r--
Changed animTicks to uint
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@824
     8
qreal distance (const QPointF &p, const QPointF &q);
insilmaril@650
     9
insilmaril@792
    10
insilmaril@792
    11
class Vector:public QPointF
insilmaril@792
    12
{
insilmaril@792
    13
public:
insilmaril@792
    14
	Vector ();
insilmaril@792
    15
	Vector (const QPointF &p);
insilmaril@792
    16
	Vector (qreal x, qreal y);
insilmaril@792
    17
insilmaril@792
    18
	friend inline bool operator==(const Vector &v1, const Vector &v2 )
insilmaril@792
    19
	{ return v1.x()==v2.x() && v1.y()==v2.y(); }
insilmaril@792
    20
insilmaril@792
    21
	virtual void normalize ();
insilmaril@792
    22
	virtual qreal dotProduct (const QPointF &b);
insilmaril@792
    23
	virtual void scale  (const qreal &f);
insilmaril@792
    24
	virtual void invert ();
insilmaril@798
    25
	virtual QPointF toQPointF();
insilmaril@792
    26
};
insilmaril@792
    27
insilmaril@789
    28
class ConvexPolygon:public QPolygonF
insilmaril@789
    29
{
insilmaril@789
    30
public:
insilmaril@789
    31
	ConvexPolygon ();
insilmaril@789
    32
	ConvexPolygon (QPolygonF p);
insilmaril@789
    33
	void calcCentroid() ;
insilmaril@789
    34
	QPointF centroid() const;
insilmaril@789
    35
	qreal weight() const;
insilmaril@792
    36
	std::string toStdString ();
insilmaril@792
    37
	Vector at (const int &i) const ; 
insilmaril@792
    38
	virtual void translate ( const Vector &offset );
insilmaril@792
    39
	virtual void translate ( qreal dx, qreal dy );
insilmaril@789
    40
private:
insilmaril@792
    41
	Vector _centroid;
insilmaril@789
    42
	qreal _area;
insilmaril@789
    43
};
insilmaril@789
    44
insilmaril@662
    45
class PolygonCollisionResult {
insilmaril@662
    46
public:
insilmaril@662
    47
    // Are the polygons going to intersect forward in time?
insilmaril@662
    48
    bool willIntersect;
insilmaril@662
    49
insilmaril@662
    50
    // Are the polygons currently intersecting?
insilmaril@662
    51
    bool intersect;
insilmaril@662
    52
insilmaril@662
    53
    // The translation to apply to the first polygon to push the polygons apart.
insilmaril@662
    54
    QPointF minTranslation;
insilmaril@662
    55
};
insilmaril@662
    56
insilmaril@662
    57
insilmaril@792
    58
void projectPolygon(Vector axis, ConvexPolygon polygon, qreal &min, qreal &max) ;
insilmaril@789
    59
insilmaril@662
    60
qreal intervalDistance(qreal minA, qreal maxA, qreal minB, qreal maxB);
insilmaril@792
    61
PolygonCollisionResult polygonCollision(ConvexPolygon polygonA, 
insilmaril@792
    62
                              ConvexPolygon polygonB, Vector velocity);
insilmaril@662
    63
insilmaril@789
    64
#endif