49 minloc(0) = minloc(1) = minloc(2) = std::numeric_limits<double>::max();
50 maxloc(0) = maxloc(1) = maxloc(2) = -std::numeric_limits<double>::max();
60 void add(
const cvec3 &v) {
61 if (v(0) < minloc(0)) minloc(0) = v(0);
62 if (v(1) < minloc(1)) minloc(1) = v(1);
63 if (v(2) < minloc(2)) minloc(2) = v(2);
64 if (v(0) > maxloc(0)) maxloc(0) = v(0);
65 if (v(1) > maxloc(1)) maxloc(1) = v(1);
66 if (v(2) > maxloc(2)) maxloc(2) = v(2);
70 minloc(0) = minloc(1) = minloc(2) = std::numeric_limits<double>::max();
71 maxloc(0) = maxloc(1) = maxloc(2) = -std::numeric_limits<double>::max();
74 int overlap(
const AABB &aabb)
76 if(maxloc(0) < aabb.minloc(0) || minloc(0) > aabb.maxloc(0))
return 0;
77 if(maxloc(1) < aabb.minloc(1) || minloc(1) > aabb.maxloc(1))
return 0;
78 if(maxloc(2) < aabb.minloc(2) || minloc(2) > aabb.maxloc(2))
return 0;
83 double overlapvolume(
const AABB &aabb, cvec3 &minol, cvec3 &maxol)
85 minol(0) = std::max(minloc(0),aabb.minloc(0));
86 maxol(0) = std::min(maxloc(0),aabb.maxloc(0));
87 minol(1) = std::max(minloc(1),aabb.minloc(1));
88 maxol(1) = std::min(maxloc(1),aabb.maxloc(1));
89 minol(2) = std::max(minloc(2),aabb.minloc(2));
90 maxol(2) = std::min(maxloc(2),aabb.maxloc(2));
92 double volume = std::abs((maxol(0)-minol(0))*(maxol(1)-minol(1))*(maxol(2)-minol(2)));
97 int border(
const AABB &aabb,
double &tol)
99 if(PointDistance3D(minloc,aabb.minloc)>tol)
return 0;
100 if(PointDistance3D(maxloc,aabb.maxloc)>tol)
return 0;