5 #include <KrisLibrary/errors.h> 25 for(
int i=0;i<x.n;i++)
26 x(i) =
Clamp(x(i),bmin(i)+d,bmax(i)-d);
38 for(
int i=0;i<x.n;i++) {
39 if(x(i)-bmin(i) < margin) {
40 margin = x(i)-bmin(i);
43 if(bmax(i)-x(i) < margin) {
44 margin = bmax(i)-x(i);
58 for(
int i=0;i<x.n;i++) {
59 margin = Min(margin,x(i)-bmin(i));
60 margin = Min(margin,bmax(i)-x(i));
70 for(
int i=0;i<x.n;i++)
71 if(x(i) < bmin(i)+d || x(i) > bmax(i)+d)
return false;
80 for(
int i=0;i<x.n;i++) {
81 if(x[i] < bmin[i]) bmin[i] = x[i];
82 if(x[i] > bmax[i]) bmax[i] = x[i];
95 Real penetration = Inf;
96 for(
int i=0;i<x.n;i++) {
97 if(x[i] <= bmin[i] && x[i] >= bmax[i]) {
98 penetration = Min(penetration,x[i]-bmin[i]);
99 penetration = Min(penetration,bmax[i]-x[i]);
104 distance2 += Sqr(bmin[i] - x[i]);
106 distance2 += Sqr(bmax[i] - x[i]);
109 if(inside)
return -penetration;
110 else return Sqrt(distance2);
bool AABBContains(const Vector &x, const Vector &bmin, const Vector &bmax, Real d=Zero)
Returns true if the AABB (bmin,bmax) contains x.
Definition: AABB.h:66
void AABBGrow(Vector &bmin, Vector &bmax, const Vector &x)
Grows an AABB to contain the vector x.
Definition: AABB.h:76
void AABBClamp(Vector &x, const Vector &bmin, const Vector &bmax, Real d=Zero)
Clamps x to be contained in the AABB (bmin,bmax)
Definition: AABB.h:21
bool AABBClipLine(const Vector &x0, const Vector &dx, const Vector &bmin, const Vector &bmax, Real &u0, Real &u1)
Definition: AABB.cpp:64
Real AABBDistance(const Vector &x, const Vector &bmin, const Vector &bmax)
Definition: AABB.h:89
double Clamp(double x, double a, double b)
Returns a if x < a, b if x > b, otherwise x.
Definition: math.h:209
int AABBLineSearch(const Vector &x0, const Vector &dx, const Vector &bmin, const Vector &bmax, Real &t)
Definition: AABB.cpp:7
Real AABBMargin(const Vector &x, const Vector &bmin, const Vector &bmax, int &index)
Definition: AABB.h:32
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12