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 |