Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00037 #ifndef FCL_OBB_H
00038 #define FCL_OBB_H
00039
00040
00041 #include "fcl/math/vec_3f.h"
00042 #include "fcl/math/matrix_3f.h"
00043
00044 namespace fcl
00045 {
00046
00048 class OBB
00049 {
00050 public:
00053 Vec3f axis[3];
00054
00056 Vec3f To;
00057
00059 Vec3f extent;
00060
00062 bool overlap(const OBB& other) const;
00063
00064
00066 bool overlap(const OBB& other, OBB& overlap_part) const
00067 {
00068 return overlap(other);
00069 }
00070
00072 bool contain(const Vec3f& p) const;
00073
00075 OBB& operator += (const Vec3f& p);
00076
00078 OBB& operator += (const OBB& other)
00079 {
00080 *this = *this + other;
00081 return *this;
00082 }
00083
00085 OBB operator + (const OBB& other) const;
00086
00088 inline FCL_REAL width() const
00089 {
00090 return 2 * extent[0];
00091 }
00092
00094 inline FCL_REAL height() const
00095 {
00096 return 2 * extent[1];
00097 }
00098
00100 inline FCL_REAL depth() const
00101 {
00102 return 2 * extent[2];
00103 }
00104
00106 inline FCL_REAL volume() const
00107 {
00108 return width() * height() * depth();
00109 }
00110
00112 inline FCL_REAL size() const
00113 {
00114 return extent.sqrLength();
00115 }
00116
00118 inline const Vec3f& center() const
00119 {
00120 return To;
00121 }
00122
00123
00125 FCL_REAL distance(const OBB& other, Vec3f* P = NULL, Vec3f* Q = NULL) const;
00126 };
00127
00128
00130 OBB translate(const OBB& bv, const Vec3f& t);
00131
00133 bool overlap(const Matrix3f& R0, const Vec3f& T0, const OBB& b1, const OBB& b2);
00134
00135
00138 bool obbDisjoint(const Matrix3f& B, const Vec3f& T, const Vec3f& a, const Vec3f& b);
00139 }
00140
00141 #endif