insilmaril@650: #ifndef GEOMETRY_H insilmaril@650: #define GEOMETRY_H insilmaril@650: insilmaril@656: #include insilmaril@650: #include insilmaril@656: #include insilmaril@650: insilmaril@650: QRectF addBBox(QRectF r1, QRectF r2); insilmaril@650: bool inBox(const QPointF &p, const QRectF &box); insilmaril@650: insilmaril@656: QPointF normalize (const QPointF &p); insilmaril@650: insilmaril@662: insilmaril@662: qreal dotProduct (const QPointF &a, const QPointF &b); insilmaril@662: insilmaril@662: class PolygonCollisionResult { insilmaril@662: public: insilmaril@662: // Are the polygons going to intersect forward in time? insilmaril@662: bool willIntersect; insilmaril@662: insilmaril@662: // Are the polygons currently intersecting? insilmaril@662: bool intersect; insilmaril@662: insilmaril@662: // The translation to apply to the first polygon to push the polygons apart. insilmaril@662: QPointF minTranslation; insilmaril@662: }; insilmaril@662: insilmaril@662: insilmaril@662: void ProjectPolygon(QPointF axis, QPolygonF polygon, qreal &min, qreal &max) ; insilmaril@662: qreal intervalDistance(qreal minA, qreal maxA, qreal minB, qreal maxB); insilmaril@662: PolygonCollisionResult PolygonCollision(QPolygonF polygonA, insilmaril@662: QPolygonF polygonB, QPointF velocity); insilmaril@662: insilmaril@650: #endif