Pioneer
Aabb.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _AABB_H
5 #define _AABB_H
6 
7 #include "libs.h"
8 
9 struct Aabb {
11  double radius;
12  Aabb() :
13  min(DBL_MAX, DBL_MAX, DBL_MAX),
14  max(-DBL_MAX, -DBL_MAX, -DBL_MAX),
15  radius(0.1)
16  {}
17  void Update(const vector3d &p)
18  {
19  if (max.x < p.x) max.x = p.x;
20  if (max.y < p.y) max.y = p.y;
21  if (max.z < p.z) max.z = p.z;
22  if (min.x > p.x) min.x = p.x;
23  if (min.y > p.y) min.y = p.y;
24  if (min.z > p.z) min.z = p.z;
25  if (p.Dot(p) > radius * radius) radius = p.Length();
26  }
27  void Update(float x, float y, float z)
28  {
29  if (max.x < x) max.x = x;
30  if (max.y < y) max.y = y;
31  if (max.z < z) max.z = z;
32  if (min.x > x) min.x = x;
33  if (min.y > y) min.y = y;
34  if (min.z > z) min.z = z;
35  }
36  template <typename T>
37  bool IsIn(const vector3<T> &p) const
38  {
39  return ((p.x >= min.x) && (p.x <= max.x) &&
40  (p.y >= min.y) && (p.y <= max.y) &&
41  (p.z >= min.z) && (p.z <= max.z));
42  }
43  bool Intersects(const Aabb &o) const
44  {
45  return (min.x < o.max.x) && (max.x > o.min.x) &&
46  (min.y < o.max.y) && (max.y > o.min.y) &&
47  (min.z < o.max.z) && (max.z > o.min.z);
48  }
49  // returns maximum point radius, usually smaller than max radius of bounding box
50  double GetRadius() const { return radius; }
51 };
52 
53 #endif /* _AABB_H */
T Dot(const vector3 &b) const
Definition: vector3.h:118
T y
Definition: vector3.h:18
T x
Definition: vector3.h:18
T Length() const
Definition: vector3.h:119
T z
Definition: vector3.h:18
Definition: Aabb.h:9
vector3d max
Definition: Aabb.h:10
Aabb()
Definition: Aabb.h:12
vector3d min
Definition: Aabb.h:10
double GetRadius() const
Definition: Aabb.h:50
void Update(float x, float y, float z)
Definition: Aabb.h:27
bool IsIn(const vector3< T > &p) const
Definition: Aabb.h:37
bool Intersects(const Aabb &o) const
Definition: Aabb.h:43
double radius
Definition: Aabb.h:11
void Update(const vector3d &p)
Definition: Aabb.h:17