diff -r f1006de05c54 -r 7d67be709091 geometry.h --- a/geometry.h Mon Sep 07 15:36:57 2009 +0000 +++ b/geometry.h Tue Sep 08 12:15:39 2009 +0000 @@ -6,6 +6,23 @@ QRectF addBBox(QRectF r1, QRectF r2); bool isInBox(const QPointF &p, const QRectF &box); + +class Vector:public QPointF +{ +public: + Vector (); + Vector (const QPointF &p); + Vector (qreal x, qreal y); + + friend inline bool operator==(const Vector &v1, const Vector &v2 ) + { return v1.x()==v2.x() && v1.y()==v2.y(); } + + virtual void normalize (); + virtual qreal dotProduct (const QPointF &b); + virtual void scale (const qreal &f); + virtual void invert (); +}; + class ConvexPolygon:public QPolygonF { public: @@ -14,19 +31,15 @@ void calcCentroid() ; QPointF centroid() const; qreal weight() const; + std::string toStdString (); + Vector at (const int &i) const ; + virtual void translate ( const Vector &offset ); + virtual void translate ( qreal dx, qreal dy ); private: - QPointF _centroid; + Vector _centroid; qreal _area; }; -QPointF normalize (const QPointF &p); - - -qreal dotProduct (const QPointF &a, const QPointF &b); - -QPointF scale (const QPointF &v,const qreal &f); -QPointF invert (const QPointF &v); - class PolygonCollisionResult { public: // Are the polygons going to intersect forward in time? @@ -40,10 +53,10 @@ }; -void projectPolygon(QPointF axis, QPolygonF polygon, qreal &min, qreal &max) ; +void projectPolygon(Vector axis, ConvexPolygon polygon, qreal &min, qreal &max) ; qreal intervalDistance(qreal minA, qreal maxA, qreal minB, qreal maxB); -PolygonCollisionResult polygonCollision(QPolygonF polygonA, - QPolygonF polygonB, QPointF velocity); +PolygonCollisionResult polygonCollision(ConvexPolygon polygonA, + ConvexPolygon polygonB, Vector velocity); #endif \ No newline at end of file