diff options
author | Brian <runningnak3d@gmail.com> | 2010-06-07 18:32:20 -0600 |
---|---|---|
committer | Brian <runningnak3d@gmail.com> | 2010-06-07 18:32:20 -0600 |
commit | 1fd70827128177aba3ac1334135fc12422819db0 (patch) | |
tree | 83355f4e124ef9d8e5ad47f9f904bfb001dcd3f9 /externals/g3dlite/G3D.lib/source/Cone.cpp | |
parent | 726a76e93aa3f20f4e642a01027f977f368a979e (diff) |
* Reverted to the old G3D library, however collision still will not compile
* and is therefore commented out.
--HG--
branch : trunk
Diffstat (limited to 'externals/g3dlite/G3D.lib/source/Cone.cpp')
-rw-r--r-- | externals/g3dlite/G3D.lib/source/Cone.cpp | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/externals/g3dlite/G3D.lib/source/Cone.cpp b/externals/g3dlite/G3D.lib/source/Cone.cpp deleted file mode 100644 index 99b29b5b0af..00000000000 --- a/externals/g3dlite/G3D.lib/source/Cone.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/** - @file Cone.cpp - - Cone class - - @maintainer Morgan McGuire, matrix@graphics3d.com - - @created 2001-07-09 - @edited 2006-01-29 -*/ - -#include "G3D/platform.h" -#include "G3D/Cone.h" -#include "G3D/Line.h" -#include "G3D/Sphere.h" -#include "G3D/Box.h" - -namespace G3D { - -Cone::Cone(const Vector3 &tip, const Vector3 &direction, float angle) { - this->tip = tip; - this->direction = direction.direction(); - this->angle = angle; - - debugAssert(angle >= 0); - debugAssert(angle <= pi()); -} - -/** - Forms the smallest cone that contains the box. Undefined if - the tip is inside or on the box. - */ -Cone::Cone(const Vector3& tip, const Box& box) { - this->tip = tip; - this->direction = (box.center() - tip).direction(); - - // Find the biggest angle - float smallestDotProduct = direction.dot((box.corner(0) - tip).direction()); - - for (int i = 1; i < 8; ++i) { - float dp = direction.dot((box.corner(i) - tip).direction()); - - debugAssert(dp > 0); - - if (dp < smallestDotProduct) { - smallestDotProduct = dp; - } - } - - angle = acosf(smallestDotProduct); -} - - -bool Cone::intersects(const Sphere& b) const { - // If the bounding sphere contains the tip, then - // they definitely touch. - if (b.contains(this->tip)) { - return true; - } - - // Move the tip backwards, effectively making the cone bigger - // to account for the radius of the sphere. - - Vector3 tip = this->tip - direction * b.radius / sinf(angle); - - return Cone(tip, direction, angle).contains(b.center); -} - - -bool Cone::contains(const Vector3& v) const { - - Vector3 d = (v - tip).direction(); - - float x = d.dot(direction); - - return (x > 0) && (x >= cosf(angle)); -} - -}; // namespace |