ELVE  1
ELVE Logic Visualization Explorer
/home/travis/build/stdgregwar/elve/Core/QuadTreeNode.h
00001 #ifndef QUADTREENODE_H
00002 #define QUADTREENODE_H
00003 
00004 #include <set>
00005 #include "Point.h"
00006 #include <QRectF>
00007 #include <QVector2D>
00008 #include <QGraphicsRectItem>
00009 #include <QGraphicsEllipseItem>
00010 
00011 namespace Elve {
00012 
00013 typedef std::vector<Point*> Masses;
00014 
00015 struct QuadTreeParams {
00016     qreal theta;
00017     size_t depth;
00018     size_t maxMasses;
00019 };
00020 
00021 class QuadTreeNode
00022 {
00023 public:
00024     QuadTreeNode();
00025     void setCenterAndRadius(const QVector2D& pos, float radius);
00026     void setChild(unsigned index, QuadTreeNode* node);
00027     void setParent(QuadTreeNode* parent);
00028 
00029     bool addPoint(const Point *obj, const QuadTreeParams& params);
00030     void remPoint(const Point* obj, const QuadTreeParams& params);
00031 
00032     QVector2D gravityFor(const Point &m, const QuadTreeParams& params) const;
00033     bool leaf() const;
00034 
00035     void reset();
00036     bool contain(const Point *o) const;
00037     const QVector2D& getCenter() const;
00038     QVector2D CoM() const;
00039     const qreal& getRadius() const;
00040     const qreal& mass() const;
00041     const bool& downOccupied() const;
00042     void debug(QPainter* p) const;
00043     virtual ~QuadTreeNode();
00044 private:
00045     std::vector<const Point *> &givePoints();
00046     QVector2D trueGravity(const Point& m) const;
00047 
00048 
00049     QuadTreeNode* mParent;
00050     QuadTreeNode* mChildren[4];
00051     std::vector<const Point*> mPoints;
00052     QVector2D mCenter;
00053     qreal mRadius;
00054     qreal mMass;
00055     size_t mCount;
00056     QVector2D mMC; 
00057 };
00058 
00059 }
00060 #endif // QUADTREENODE_H
 All Classes Functions