com.jme.bounding
Class BoundingSphere

java.lang.Object
  extended by com.jme.bounding.BoundingVolume
      extended by com.jme.bounding.BoundingSphere
All Implemented Interfaces:
Savable, java.io.Serializable

public class BoundingSphere
extends BoundingVolume

BoundingSphere defines a sphere that defines a container for a group of vertices of a particular piece of geometry. This sphere defines a radius and a center.

A typical usage is to allow the class define the center and radius by calling either containAABB or averagePoints. A call to computeFramePoint in turn calls containAABB.

Version:
$Id: BoundingSphere.java 4131 2009-03-19 20:15:28Z blaine.dev $
Author:
Mark Powell
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class com.jme.bounding.BoundingVolume
BoundingVolume.Type
 
Field Summary
 float radius
           
 
Fields inherited from class com.jme.bounding.BoundingVolume
_compVect1, _compVect2, _compVect3, center, checkPlane
 
Constructor Summary
BoundingSphere()
          Default contstructor instantiates a new BoundingSphere object.
BoundingSphere(float r, Vector3f c)
          Constructor instantiates a new BoundingSphere object.
 
Method Summary
 void averagePoints(Vector3f[] points)
          averagePoints selects the sphere center to be the average of the points and the sphere radius to be the smallest value to enclose all points.
 void calcWelzl(java.nio.FloatBuffer points)
          Calculates a minimum bounding sphere for the set of points.
 BoundingVolume clone(BoundingVolume store)
          clone creates a new BoundingSphere object containing the same data as this one.
 void computeFromPoints(java.nio.FloatBuffer points)
          computeFromPoints creates a new Bounding Sphere from a given set of points.
 void computeFromTris(int[] indices, TriMesh mesh, int start, int end)
          computeFromTris creates a new Bounding Box from a given set of triangles.
 void computeFromTris(Triangle[] tris, int start, int end)
          computeFromTris creates a new Bounding Box from a given set of triangles.
 boolean contains(Vector3f point)
          determines if a given point is contained within this bounding volume.
 float distanceToEdge(Vector3f point)
          Find the distance from the nearest edge of this Bounding Volume to the given point.
 float getRadius()
          getRadius returns the radius of the bounding sphere.
 BoundingVolume.Type getType()
          getType returns the type of bounding volume this is.
 float getVolume()
           
 boolean intersects(BoundingVolume bv)
          determines if this bounding volume and a second given volume are intersecting.
 boolean intersects(Ray ray)
          determines if a ray intersects this bounding volume.
 boolean intersectsBoundingBox(BoundingBox bb)
          determines if this bounding volume and a given bounding box are intersecting.
 boolean intersectsCapsule(BoundingCapsule bc)
          determins if this bounding volume and a given bounding capsule are intersecting.
 boolean intersectsOrientedBoundingBox(OrientedBoundingBox obb)
          determines if this bounding volume and a given bounding box are intersecting.
 boolean intersectsSphere(BoundingSphere bs)
          determines if this bounding volume and a given bounding sphere are intersecting.
 IntersectionRecord intersectsWhere(Ray ray)
          determines if a ray intersects this bounding volume and if so, where.
 BoundingVolume merge(BoundingVolume volume)
          merge combines this sphere with a second bounding sphere.
 BoundingVolume mergeLocal(BoundingVolume volume)
          mergeLocal combines this sphere with a second bounding sphere locally.
 void read(JMEImporter e)
           
 void setRadius(float radius)
          setRadius sets the radius of this bounding sphere.
 java.lang.String toString()
          toString returns the string representation of this object.
 BoundingVolume transform(Quaternion rotate, Vector3f translate, Vector3f scale, BoundingVolume store)
          transform modifies the center of the sphere to reflect the change made via a rotation, translation and scale.
 Plane.Side whichSide(Plane plane)
          whichSide takes a plane (typically provided by a view frustum) to determine which side this bound is on.
 void write(JMEExporter e)
           
 
Methods inherited from class com.jme.bounding.BoundingVolume
distanceSquaredTo, distanceTo, getCenter, getCenter, getCheckPlane, getClassTag, setCenter, setCheckPlane, transform
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

radius

public float radius
Constructor Detail

BoundingSphere

public BoundingSphere()
Default contstructor instantiates a new BoundingSphere object.


BoundingSphere

public BoundingSphere(float r,
                      Vector3f c)
Constructor instantiates a new BoundingSphere object.

Parameters:
r - the radius of the sphere.
c - the center of the sphere.
Method Detail

getType

public BoundingVolume.Type getType()
Description copied from class: BoundingVolume
getType returns the type of bounding volume this is.

Specified by:
getType in class BoundingVolume

getRadius

public float getRadius()
getRadius returns the radius of the bounding sphere.

Returns:
the radius of the bounding sphere.

setRadius

public void setRadius(float radius)
setRadius sets the radius of this bounding sphere.

Parameters:
radius - the new radius of the bounding sphere.

computeFromPoints

public void computeFromPoints(java.nio.FloatBuffer points)
computeFromPoints creates a new Bounding Sphere from a given set of points. It uses the calcWelzl method as default.

Specified by:
computeFromPoints in class BoundingVolume
Parameters:
points - the points to contain.

computeFromTris

public void computeFromTris(Triangle[] tris,
                            int start,
                            int end)
computeFromTris creates a new Bounding Box from a given set of triangles. It is used in OBBTree calculations.

Specified by:
computeFromTris in class BoundingVolume
Parameters:
tris -
start -
end -

computeFromTris

public void computeFromTris(int[] indices,
                            TriMesh mesh,
                            int start,
                            int end)
computeFromTris creates a new Bounding Box from a given set of triangles. It is used in OBBTree calculations.

Specified by:
computeFromTris in class BoundingVolume
Parameters:
indices -
mesh -
start -
end -

calcWelzl

public void calcWelzl(java.nio.FloatBuffer points)
Calculates a minimum bounding sphere for the set of points. The algorithm was originally found at http://www.flipcode.com/cgi-bin/msg.cgi?showThread=COTD-SmallestEnclosingSpheres&forum=cotd&id=-1 in C++ and translated to java by Cep21

Parameters:
points - The points to calculate the minimum bounds from.

averagePoints

public void averagePoints(Vector3f[] points)
averagePoints selects the sphere center to be the average of the points and the sphere radius to be the smallest value to enclose all points.

Parameters:
points - the list of points to contain.

transform

public BoundingVolume transform(Quaternion rotate,
                                Vector3f translate,
                                Vector3f scale,
                                BoundingVolume store)
transform modifies the center of the sphere to reflect the change made via a rotation, translation and scale.

Specified by:
transform in class BoundingVolume
Parameters:
rotate - the rotation change.
translate - the translation change.
scale - the size change.
store - sphere to store result in
Returns:
BoundingVolume

whichSide

public Plane.Side whichSide(Plane plane)
whichSide takes a plane (typically provided by a view frustum) to determine which side this bound is on.

Specified by:
whichSide in class BoundingVolume
Parameters:
plane - the plane to check against.
Returns:
side

merge

public BoundingVolume merge(BoundingVolume volume)
merge combines this sphere with a second bounding sphere. This new sphere contains both bounding spheres and is returned.

Specified by:
merge in class BoundingVolume
Parameters:
volume - the sphere to combine with this sphere.
Returns:
a new sphere

mergeLocal

public BoundingVolume mergeLocal(BoundingVolume volume)
mergeLocal combines this sphere with a second bounding sphere locally. Altering this sphere to contain both the original and the additional sphere volumes;

Specified by:
mergeLocal in class BoundingVolume
Parameters:
volume - the sphere to combine with this sphere.
Returns:
this

clone

public BoundingVolume clone(BoundingVolume store)
clone creates a new BoundingSphere object containing the same data as this one.

Specified by:
clone in class BoundingVolume
Parameters:
store - where to store the cloned information. if null or wrong class, a new store is created.
Returns:
the new BoundingSphere

toString

public java.lang.String toString()
toString returns the string representation of this object. The form is: "Radius: RRR.SSSS Center: ".

Overrides:
toString in class java.lang.Object
Returns:
the string representation of this.

intersects

public boolean intersects(BoundingVolume bv)
Description copied from class: BoundingVolume
determines if this bounding volume and a second given volume are intersecting. Intersecting being: one volume contains another, one volume overlaps another or one volume touches another.

Specified by:
intersects in class BoundingVolume
Parameters:
bv - the second volume to test against.
Returns:
true if this volume intersects the given volume.

intersectsSphere

public boolean intersectsSphere(BoundingSphere bs)
Description copied from class: BoundingVolume
determines if this bounding volume and a given bounding sphere are intersecting.

Specified by:
intersectsSphere in class BoundingVolume
Parameters:
bs - the bounding sphere to test against.
Returns:
true if this volume intersects the given bounding sphere.

intersectsBoundingBox

public boolean intersectsBoundingBox(BoundingBox bb)
Description copied from class: BoundingVolume
determines if this bounding volume and a given bounding box are intersecting.

Specified by:
intersectsBoundingBox in class BoundingVolume
Parameters:
bb - the bounding box to test against.
Returns:
true if this volume intersects the given bounding box.

intersectsOrientedBoundingBox

public boolean intersectsOrientedBoundingBox(OrientedBoundingBox obb)
Description copied from class: BoundingVolume
determines if this bounding volume and a given bounding box are intersecting.

Specified by:
intersectsOrientedBoundingBox in class BoundingVolume
Parameters:
obb - the bounding box to test against.
Returns:
true if this volume intersects the given bounding box.

intersectsCapsule

public boolean intersectsCapsule(BoundingCapsule bc)
Description copied from class: BoundingVolume
determins if this bounding volume and a given bounding capsule are intersecting.

Specified by:
intersectsCapsule in class BoundingVolume
Parameters:
bc - the bounding capsule to test against.
Returns:
true if this volume instersects the given bounding capsule.

intersects

public boolean intersects(Ray ray)
Description copied from class: BoundingVolume
determines if a ray intersects this bounding volume.

Specified by:
intersects in class BoundingVolume
Parameters:
ray - the ray to test.
Returns:
true if this volume is intersected by a given ray.

intersectsWhere

public IntersectionRecord intersectsWhere(Ray ray)
Description copied from class: BoundingVolume
determines if a ray intersects this bounding volume and if so, where.

Specified by:
intersectsWhere in class BoundingVolume
Parameters:
ray - the ray to test.
Returns:
an IntersectionRecord containing information about any intersections made by the given Ray with this bounding

contains

public boolean contains(Vector3f point)
Description copied from class: BoundingVolume
determines if a given point is contained within this bounding volume.

Specified by:
contains in class BoundingVolume
Parameters:
point - the point to check
Returns:
true if the point lies within this bounding volume.

distanceToEdge

public float distanceToEdge(Vector3f point)
Description copied from class: BoundingVolume
Find the distance from the nearest edge of this Bounding Volume to the given point.

Specified by:
distanceToEdge in class BoundingVolume
Parameters:
point - The point to get the distance to
Returns:
distance

write

public void write(JMEExporter e)
           throws java.io.IOException
Specified by:
write in interface Savable
Overrides:
write in class BoundingVolume
Throws:
java.io.IOException

read

public void read(JMEImporter e)
          throws java.io.IOException
Specified by:
read in interface Savable
Overrides:
read in class BoundingVolume
Throws:
java.io.IOException

getVolume

public float getVolume()
Specified by:
getVolume in class BoundingVolume