| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*
- -----------------------------------------------------------------------------
- This source file is part of OGRE
- (Object-oriented Graphics Rendering Engine)
- For the latest info, see http://www.ogre3d.org/
- Copyright (c) 2000-2011 Torus Knot Software Ltd
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- -----------------------------------------------------------------------------
- */
- #ifndef __Sphere_H_
- #define __Sphere_H_
- // Precompiler options
- #include "CmPrerequisitesUtil.h"
- #include "CmVector3.h"
- namespace CamelotFramework {
- /** \addtogroup Core
- * @{
- */
- /** \addtogroup Math
- * @{
- */
- /** A sphere primitive, mostly used for bounds checking.
- @remarks
- A sphere in math texts is normally represented by the function
- x^2 + y^2 + z^2 = r^2 (for sphere's centered on the origin). Engine stores spheres
- simply as a center point and a radius.
- */
- class CM_UTILITY_EXPORT Sphere
- {
- protected:
- float mRadius;
- Vector3 mCenter;
- public:
- /** Standard constructor - creates a unit sphere around the origin.*/
- Sphere() : mRadius(1.0), mCenter(Vector3::ZERO) {}
- /** Constructor allowing arbitrary spheres.
- @param center The center point of the sphere.
- @param radius The radius of the sphere.
- */
- Sphere(const Vector3& center, float radius)
- : mRadius(radius), mCenter(center) {}
- /** Returns the radius of the sphere. */
- float getRadius(void) const { return mRadius; }
- /** Sets the radius of the sphere. */
- void setRadius(float radius) { mRadius = radius; }
- /** Returns the center point of the sphere. */
- const Vector3& getCenter(void) const { return mCenter; }
- /** Sets the center point of the sphere. */
- void setCenter(const Vector3& center) { mCenter = center; }
- /** Returns whether or not this sphere intersects another sphere. */
- bool intersects(const Sphere& s) const
- {
- return (s.mCenter - mCenter).squaredLength() <=
- Math::Sqr(s.mRadius + mRadius);
- }
- /** Returns whether or not this sphere intersects a box. */
- bool intersects(const AABox& box) const
- {
- return Math::intersects(*this, box);
- }
- /** Returns whether or not this sphere intersects a plane. */
- bool intersects(const Plane& plane) const
- {
- return Math::intersects(*this, plane);
- }
- /** Returns whether or not this sphere intersects a point. */
- bool intersects(const Vector3& v) const
- {
- return ((v - mCenter).squaredLength() <= Math::Sqr(mRadius));
- }
-
- };
- /** @} */
- /** @} */
- }
- #endif
|