KDTree.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef KDTREE_H
  2. #define KDTREE_H
  3. #include <vector>
  4. #include "common/utils/Array.h"
  5. #include "common/math/Vector.h"
  6. struct KDTree final {
  7. class Triangle {
  8. Array<Vector3, 3> v;
  9. Vector3 mid;
  10. public:
  11. Triangle(const Vector3& a, const Vector3& b, const Vector3& c);
  12. const Array<Vector3, 3>& data() const;
  13. const Vector3& operator[](int index) const;
  14. const Vector3& getMid() const;
  15. };
  16. private:
  17. struct Node {
  18. std::vector<Triangle> data;
  19. int splitDim;
  20. float splitValue;
  21. Node* lessEqual;
  22. Node* greater;
  23. Node();
  24. };
  25. Node root;
  26. public:
  27. KDTree();
  28. ~KDTree();
  29. KDTree(const KDTree& other) = delete;
  30. KDTree(KDTree&& other) = delete;
  31. KDTree& operator=(const KDTree& other) = delete;
  32. KDTree& operator=(KDTree&& other) = delete;
  33. void build(std::vector<KDTree::Triangle>& data);
  34. private:
  35. void clean(Node* n);
  36. float median(std::vector<KDTree::Triangle>& data, int dim) const;
  37. void build(Node* n, std::vector<KDTree::Triangle>& data);
  38. };
  39. #endif