Package org.sunflow.math
Class BoundingBox
java.lang.Object
org.sunflow.math.BoundingBox
3D axis-aligned bounding box. Stores only the minimum and maximum corner
points.
-
Constructor Summary
ConstructorsConstructorDescriptionCreates an empty box.BoundingBox
(float size) Creates a bounding box centered around the origin.BoundingBox
(float x, float y, float z) Creates a bounding box containing only the specified point.Creates a copy of the given box.Creates a bounding box containing only the specified point. -
Method Summary
Modifier and TypeMethodDescriptionfinal boolean
contains
(float x, float y, float z) Check to see if the specified point is inside the volume defined by this box.final boolean
Checks to see if the specifiedpoint
is inside the volume defined by this box.final void
Enlarge the bounding box by the minimum possible amount to avoid numeric precision related problems.final float
getArea()
Gets the surface area of the box.final float
getBound
(int i) Gets a specific coordinate of the surface's bounding box.final Point3
Gets the center of the box, computed as (min + max) / 2.final Point3
getCorner
(int i) Gets a corner of the bounding box.final Vector3
Gets the extents vector for the box.final Point3
Gets the maximum corner of the box.final Point3
Gets the minimum corner of the box.final float
Gets the box's volumefinal void
include
(float x, float y, float z) Changes the extents of the box as needed to include the given point into this box.final void
Changes the extents of the box as needed to include the given box into this box.final void
Changes the extents of the box as needed to include the givenpoint
into this box.final boolean
Returnstrue
if the specified bounding box intersects this one.final boolean
isEmpty()
Returnstrue
when the box has just been initialized, and is still empty.final String
toString()
-
Constructor Details
-
BoundingBox
public BoundingBox()Creates an empty box. The minimum point will have all components set to positive infinity, and the maximum will have all components set to negative infinity. -
BoundingBox
Creates a copy of the given box.- Parameters:
b
- bounding box to copy
-
BoundingBox
Creates a bounding box containing only the specified point.- Parameters:
p
- point to include
-
BoundingBox
public BoundingBox(float x, float y, float z) Creates a bounding box containing only the specified point.- Parameters:
x
- x coordinate of the point to includey
- y coordinate of the point to includez
- z coordinate of the point to include
-
BoundingBox
public BoundingBox(float size) Creates a bounding box centered around the origin.- Parameters:
size
- half edge length of the bounding box
-
-
Method Details
-
getMinimum
Gets the minimum corner of the box. That is the corner of smallest coordinates on each axis. Note that the returned reference is not cloned for efficiency purposes so care must be taken not to change the coordinates of the point.- Returns:
- a reference to the minimum corner
-
getMaximum
Gets the maximum corner of the box. That is the corner of largest coordinates on each axis. Note that the returned reference is not cloned for efficiency purposes so care must be taken not to change the coordinates of the point.- Returns:
- a reference to the maximum corner
-
getCenter
Gets the center of the box, computed as (min + max) / 2.- Returns:
- a reference to the center of the box
-
getCorner
Gets a corner of the bounding box. The index scheme uses the binary representation of the index to decide which corner to return. Corner 0 is equivalent to the minimum and corner 7 is equivalent to the maximum.- Parameters:
i
- a corner index, from 0 to 7- Returns:
- the corresponding corner
-
getBound
public final float getBound(int i) Gets a specific coordinate of the surface's bounding box.- Parameters:
i
- index of a side from 0 to 5- Returns:
- value of the request bounding box side
-
getExtents
Gets the extents vector for the box. This vector is computed as (max - min). Its coordinates are always positive and represent the dimensions of the box along the three axes.- Returns:
- a refreence to the extent vector
- See Also:
-
getArea
public final float getArea()Gets the surface area of the box.- Returns:
- surface area
-
getVolume
public final float getVolume()Gets the box's volume- Returns:
- volume
-
enlargeUlps
public final void enlargeUlps()Enlarge the bounding box by the minimum possible amount to avoid numeric precision related problems. -
isEmpty
public final boolean isEmpty()Returnstrue
when the box has just been initialized, and is still empty. This method might also return true if the state of the box becomes inconsistent and some component of the minimum corner is larger than the corresponding coordinate of the maximum corner.- Returns:
true
if the box is empty,false
otherwise
-
intersects
Returnstrue
if the specified bounding box intersects this one. The boxes are treated as volumes, so a box inside another will return true. Returnsfalse
if the parameter isnull
.- Parameters:
b
- box to be tested for intersection- Returns:
true
if the boxes overlap,false
otherwise
-
contains
Checks to see if the specifiedpoint
is inside the volume defined by this box. Returnsfalse
if the parameter isnull
.- Parameters:
p
- point to be tested for containment- Returns:
true
if the point is inside the box,false
otherwise
-
contains
public final boolean contains(float x, float y, float z) Check to see if the specified point is inside the volume defined by this box.- Parameters:
x
- x coordinate of the point to be testedy
- y coordinate of the point to be testedz
- z coordinate of the point to be tested- Returns:
true
if the point is inside the box,false
otherwise
-
include
Changes the extents of the box as needed to include the givenpoint
into this box. Does nothing if the parameter isnull
.- Parameters:
p
- point to be included
-
include
public final void include(float x, float y, float z) Changes the extents of the box as needed to include the given point into this box.- Parameters:
x
- x coordinate of the pointy
- y coordinate of the pointz
- z coordinate of the point
-
include
Changes the extents of the box as needed to include the given box into this box. Does nothing if the parameter isnull
.- Parameters:
b
- box to be included
-
toString
-