diff options
author | Don Bright <hugh.m.bright@gmail.com> | 2011-12-24 13:50:24 (GMT) |
---|---|---|
committer | Don Bright <hugh.m.bright@gmail.com> | 2011-12-24 13:50:24 (GMT) |
commit | 3572251a9139bf95f2217c2e9957668b6c82ccdc (patch) | |
tree | c2dfdef220b78f0d2cf86f37f99e3bf36477f19e /src/linalg.cc | |
parent | 10c96326866c8256e82f0092a18f4f4e3ca06a74 (diff) |
commit Marius' linalg.cc
Diffstat (limited to 'src/linalg.cc')
-rw-r--r-- | src/linalg.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/linalg.cc b/src/linalg.cc new file mode 100644 index 0000000..30f23af --- /dev/null +++ b/src/linalg.cc @@ -0,0 +1,27 @@ +#include "linalg.h" + +// FIXME: We can achieve better pruning by either: +// o Recalculate the box based on the transformed object +// o Store boxes are oriented bounding boxes and implement oriented +// bbox intersection + +// FIXME: This function can be generalized, but we don't need it atm. + +/*! + Transforms the given bounding box by transforming each of its 8 vertices. + Returns a new bounding box. +*/ +BoundingBox operator*(const Transform3d &m, const BoundingBox &box) +{ + BoundingBox newbox; + Vector3d boxvec[2] = { box.min(), box.max() }; + for (int k=0;k<2;k++) { + for (int j=0;j<2;j++) { + for (int i=0;i<2;i++) { + newbox.extend(m * Vector3d(boxvec[i][0], boxvec[j][1], boxvec[k][2])); + } + } + } + return newbox; +} + |