geometry.h
author insilmaril
Mon, 14 Jun 2010 13:59:17 +0000
changeset 848 e265f07f2173
parent 835 31841b366d5e
permissions -rw-r--r--
Fixed tmp relink, colored headings in TreeView
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@835
    21
	bool isNull();
insilmaril@792
    22
	virtual void normalize ();
insilmaril@792
    23
	virtual qreal dotProduct (const QPointF &b);
insilmaril@792
    24
	virtual void scale  (const qreal &f);
insilmaril@792
    25
	virtual void invert ();
insilmaril@798
    26
	virtual QPointF toQPointF();
insilmaril@792
    27
};
insilmaril@792
    28
insilmaril@789
    29
class ConvexPolygon:public QPolygonF
insilmaril@789
    30
{
insilmaril@789
    31
public:
insilmaril@789
    32
	ConvexPolygon ();
insilmaril@789
    33
	ConvexPolygon (QPolygonF p);
insilmaril@789
    34
	void calcCentroid() ;
insilmaril@789
    35
	QPointF centroid() const;
insilmaril@789
    36
	qreal weight() const;
insilmaril@792
    37
	std::string toStdString ();
insilmaril@792
    38
	Vector at (const int &i) const ; 
insilmaril@792
    39
	virtual void translate ( const Vector &offset );
insilmaril@792
    40
	virtual void translate ( qreal dx, qreal dy );
insilmaril@789
    41
private:
insilmaril@792
    42
	Vector _centroid;
insilmaril@789
    43
	qreal _area;
insilmaril@789
    44
};
insilmaril@789
    45
insilmaril@662
    46
class PolygonCollisionResult {
insilmaril@662
    47
public:
insilmaril@662
    48
    // Are the polygons going to intersect forward in time?
insilmaril@662
    49
    bool willIntersect;
insilmaril@662
    50
insilmaril@662
    51
    // Are the polygons currently intersecting?
insilmaril@662
    52
    bool intersect;
insilmaril@662
    53
insilmaril@662
    54
    // The translation to apply to the first polygon to push the polygons apart.
insilmaril@662
    55
    QPointF minTranslation;
insilmaril@662
    56
};
insilmaril@662
    57
insilmaril@662
    58
insilmaril@792
    59
void projectPolygon(Vector axis, ConvexPolygon polygon, qreal &min, qreal &max) ;
insilmaril@789
    60
insilmaril@662
    61
qreal intervalDistance(qreal minA, qreal maxA, qreal minB, qreal maxB);
insilmaril@792
    62
PolygonCollisionResult polygonCollision(ConvexPolygon polygonA, 
insilmaril@792
    63
                              ConvexPolygon polygonB, Vector velocity);
insilmaril@662
    64
insilmaril@789
    65
#endif