KrisLibrary  1.0.0
AABB.h
Go to the documentation of this file.
1 #ifndef MATH_AABB_H
2 #define MATH_AABB_H
3 
4 #include "vector.h"
5 #include <KrisLibrary/errors.h>
6 
15 namespace Math {
16 
19 
21 inline void AABBClamp(Vector& x,const Vector& bmin,const Vector& bmax,Real d=Zero)
22 {
23  Assert(x.n==bmin.n);
24  Assert(x.n==bmax.n);
25  for(int i=0;i<x.n;i++)
26  x(i) = Clamp(x(i),bmin(i)+d,bmax(i)-d);
27 }
28 
32 inline Real AABBMargin(const Vector& x,const Vector& bmin,const Vector& bmax,int& index)
33 {
34  Assert(x.n==bmin.n);
35  Assert(x.n==bmax.n);
36  Real margin=Inf;
37  index=-1;
38  for(int i=0;i<x.n;i++) {
39  if(x(i)-bmin(i) < margin) {
40  margin = x(i)-bmin(i);
41  index=i;
42  }
43  if(bmax(i)-x(i) < margin) {
44  margin = bmax(i)-x(i);
45  index=i;
46  }
47  }
48  return margin;
49 }
50 
53 inline Real AABBMargin(const Vector& x,const Vector& bmin,const Vector& bmax)
54 {
55  Assert(x.n==bmin.n);
56  Assert(x.n==bmax.n);
57  Real margin=Inf;
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));
61  }
62  return margin;
63 }
64 
66 inline bool AABBContains(const Vector& x,const Vector& bmin,const Vector& bmax,Real d=Zero)
67 {
68  Assert(x.n==bmin.n);
69  Assert(x.n==bmax.n);
70  for(int i=0;i<x.n;i++)
71  if(x(i) < bmin(i)+d || x(i) > bmax(i)+d) return false;
72  return true;
73 }
74 
78 int AABBLineSearch(const Vector& x0,const Vector& dx,const Vector& bmin,const Vector& bmax,Real& t);
79 
82 bool AABBClipLine(const Vector& x0,const Vector& dx,
83  const Vector& bmin,const Vector& bmax,
84  Real& u0,Real& u1);
85 
87 } //namespace Math
88 
89 #endif
90 
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 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
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