00001 #ifndef GRAVITY_H 00002 #define GRAVITY_H 00003 00004 #include "Force.h" 00005 #include "Point.h" 00006 #include "QuadTree.h" 00007 00008 namespace Elve { 00009 00010 class Gravity : public Force 00011 { 00012 public: 00013 Gravity(qreal k); 00014 virtual QVector2D force(const Point &m) const override; 00015 QVector2D plainOldGravity(const Point& m) const; 00016 QVector2D quadGravity(const Point& m) const; 00017 void setQuadTreeBounds(const QRectF bounds); 00018 void updateQuadTree(); 00019 void addPoint(const Point* m); 00020 void clear(); 00021 void debug(QPainter* p) const; 00022 void setK(qreal k); 00023 private: 00024 std::set<const Point*> mGalaxy; 00025 QuadTree mQuadTree; 00026 qreal mK; 00027 }; 00028 00029 } 00030 00031 #endif // GRAVITY_H