geometry.h
author insilmaril
Mon, 24 Aug 2009 14:39:07 +0000
changeset 789 d85834ad8c54
parent 754 db0ec4bcf416
child 792 7d67be709091
permissions -rw-r--r--
Fixed collision methods, segfault for wrong flagname
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@789
     9
class ConvexPolygon:public QPolygonF
insilmaril@789
    10
{
insilmaril@789
    11
public:
insilmaril@789
    12
	ConvexPolygon ();
insilmaril@789
    13
	ConvexPolygon (QPolygonF p);
insilmaril@789
    14
	void calcCentroid() ;
insilmaril@789
    15
	QPointF centroid() const;
insilmaril@789
    16
	qreal weight() const;
insilmaril@789
    17
private:
insilmaril@789
    18
	QPointF _centroid;
insilmaril@789
    19
	qreal _area;
insilmaril@789
    20
};
insilmaril@789
    21
insilmaril@656
    22
QPointF normalize (const QPointF &p);
insilmaril@650
    23
insilmaril@662
    24
insilmaril@662
    25
qreal dotProduct (const QPointF &a, const QPointF &b);
insilmaril@662
    26
insilmaril@789
    27
QPointF scale  (const QPointF &v,const qreal &f);
insilmaril@789
    28
QPointF invert (const QPointF &v);
insilmaril@789
    29
insilmaril@662
    30
class PolygonCollisionResult {
insilmaril@662
    31
public:
insilmaril@662
    32
    // Are the polygons going to intersect forward in time?
insilmaril@662
    33
    bool willIntersect;
insilmaril@662
    34
insilmaril@662
    35
    // Are the polygons currently intersecting?
insilmaril@662
    36
    bool intersect;
insilmaril@662
    37
insilmaril@662
    38
    // The translation to apply to the first polygon to push the polygons apart.
insilmaril@662
    39
    QPointF minTranslation;
insilmaril@662
    40
};
insilmaril@662
    41
insilmaril@662
    42
insilmaril@789
    43
void projectPolygon(QPointF axis, QPolygonF polygon, qreal &min, qreal &max) ;
insilmaril@789
    44
insilmaril@662
    45
qreal intervalDistance(qreal minA, qreal maxA, qreal minB, qreal maxB);
insilmaril@789
    46
PolygonCollisionResult polygonCollision(QPolygonF polygonA, 
insilmaril@662
    47
                              QPolygonF polygonB, QPointF velocity);
insilmaril@662
    48
insilmaril@789
    49
#endif