aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/jogamp/graph/geom/AABBox.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/jogamp/graph/geom/AABBox.java')
-rw-r--r--src/com/jogamp/graph/geom/AABBox.java115
1 files changed, 82 insertions, 33 deletions
diff --git a/src/com/jogamp/graph/geom/AABBox.java b/src/com/jogamp/graph/geom/AABBox.java
index a2566b91f..f97c43a57 100644
--- a/src/com/jogamp/graph/geom/AABBox.java
+++ b/src/com/jogamp/graph/geom/AABBox.java
@@ -30,15 +30,29 @@ package com.jogamp.graph.geom;
import com.jogamp.graph.math.VectorUtil;
/**
- * Axis Aligned Bounding Box.
+ * Axis Aligned Bounding Box. Defined by two 3D coordinates (low and high)
+ * The low being the the lower left corner of the box, and the high being the upper
+ * right corner of the box.
+ *
*/
public class AABBox {
private float[] low = {Float.MAX_VALUE,Float.MAX_VALUE,Float.MAX_VALUE};
private float[] high = {-1*Float.MAX_VALUE,-1*Float.MAX_VALUE,-1*Float.MAX_VALUE};
private float[] center = new float[3];
+ /** Create a Axis Aligned bounding box (AABBox) where the low and and high MAX float Values.
+ */
public AABBox() {}
+ /** Create an AABBox specifying the coordinates of the low and high
+ *
+ * @param lx min x-coordinate
+ * @param ly min y-coordnate
+ * @param lz min z-coordinate
+ * @param hx max x-coordinate
+ * @param hy max y-coordinate
+ * @param hz max z-coordinate
+ */
public AABBox(float lx, float ly, float lz,
float hx, float hy, float hz)
{
@@ -48,12 +62,10 @@ public class AABBox {
computeCenter();
}
- public String toString() {
- return "[ "+low[0]+"/"+low[1]+"/"+low[1]+" .. "+high[0]+"/"+high[0]+"/"+high[0]+", ctr "+
- center[0]+"/"+center[1]+"/"+center[1]+" ]";
- }
-
-
+ /** Create a AABBox defining the low and high
+ * @param low min xyz-coordinates
+ * @param high max xyz-coordinates
+ */
public AABBox(float[] low, float[] high)
{
this.low = low;
@@ -62,27 +74,39 @@ public class AABBox {
computeCenter();
}
+ /** Get the max xyz-coordinates
+ * @return a float array containing the max xyz coordinates
+ */
public float[] getHigh()
{
return high;
}
- public void setHigh(float hx, float hy, float hz)
+
+ private void setHigh(float hx, float hy, float hz)
{
this.high[0] = hx;
this.high[1] = hy;
this.high[2] = hz;
}
+
+ /** Get the min xyz-coordinates
+ * @return a float array containing the min xyz coordinates
+ */
public float[] getLow()
{
return low;
}
- public void setLow(float lx, float ly, float lz)
+
+ private void setLow(float lx, float ly, float lz)
{
this.low[0] = lx;
this.low[1] = ly;
this.low[2] = lz;
}
+ /** Resize the AABBox to encapsulate another AABox
+ * @param newBox AABBox to be encapsulated in
+ */
public void resize(AABBox newBox)
{
float[] newLow = newBox.getLow();
@@ -114,6 +138,12 @@ public class AABBox {
center[2] = (high[2] + low[2])/2;
}
+ /** Resize the AABBox to encapsulate the passed
+ * xyz-coordinates.
+ * @param x x-axis coordinate value
+ * @param y y-axis coordinate value
+ * @param z z-axis coordinate value
+ */
public void resize(float x, float y, float z)
{
/** test low */
@@ -135,6 +165,13 @@ public class AABBox {
computeCenter();
}
+ /** Check if the x & y coordinates are bounded/contained
+ * by this AABBox
+ * @param x x-axis coordinate value
+ * @param y y-axis coordinate value
+ * @return true if x belong to (low.x, high.x) and
+ * y belong to (low.y, high.y)
+ */
public boolean contains(float x, float y){
if(x<low[0] || x>high[0]){
return false;
@@ -145,6 +182,14 @@ public class AABBox {
return true;
}
+ /** Check if the xyz coordinates are bounded/contained
+ * by this AABBox.
+ * @param x x-axis coordinate value
+ * @param y y-axis coordinate value
+ * @param z z-axis coordinate value
+ * @return true if x belong to (low.x, high.x) and
+ * y belong to (low.y, high.y) and z belong to (low.z, high.z)
+ */
public boolean contains(float x, float y, float z){
if(x<low[0] || x>high[0]){
return false;
@@ -158,14 +203,15 @@ public class AABBox {
return true;
}
- /**
- * @return true if area is empty
- */
- boolean isEmpty() {
- return getWidth() <=0 || getHeight() <= 0 ;
- }
-
- public boolean intersects(double x, double y, double w, double h) {
+ /** Check if there is a common region between this AABBox and the passed
+ * 2D region irrespective of z range
+ * @param x lower left x-coord
+ * @param y lower left y-coord
+ * @param w width
+ * @param h hight
+ * @return true if this AABBox might have a common region with this 2D region
+ */
+ public boolean intersects(float x, float y, float w, float h) {
if (w <= 0 || h <= 0) {
return false;
}
@@ -176,8 +222,8 @@ public class AABBox {
return false;
}
- final float x0 = getX();
- final float y0 = getY();
+ final float x0 = getMinX();
+ final float y0 = getMinY();
return (x + w > x0 &&
y + h > y0 &&
x < x0 + _w &&
@@ -185,26 +231,24 @@ public class AABBox {
}
+ /** Get the size of the Box where the size is represented by the
+ * length of the vector between low and high.
+ * @return a float representing the size of the AABBox
+ */
public float getSize(){
return VectorUtil.computeLength(low, high);
}
+ /**Get the Center of the AABBox
+ * @return the xyz-coordinates of the center of the AABBox
+ */
public float[] getCenter() {
return center;
}
- public void setCenter(float[] center) {
- this.center = center;
- }
-
- public void setHigh(float[] high) {
- this.high = high;
- }
-
- public void setLow(float[] low) {
- this.low = low;
- }
-
+ /** Scale the AABBox by a constant
+ * @param size a constant float value
+ */
public void scale(float size) {
float[] diffH = new float[3];
diffH[0] = high[0] - center[0];
@@ -224,11 +268,11 @@ public class AABBox {
low = VectorUtil.vectorAdd(center, diffL);
}
- public float getX() {
+ public float getMinX() {
return low[0];
}
- public float getY() {
+ public float getMinY() {
return low[1];
}
@@ -246,4 +290,9 @@ public class AABBox {
public AABBox clone(){
return new AABBox(this.low, this.high);
}
+
+ public String toString() {
+ return "[ "+low[0]+"/"+low[1]+"/"+low[1]+" .. "+high[0]+"/"+high[0]+"/"+high[0]+", ctr "+
+ center[0]+"/"+center[1]+"/"+center[1]+" ]";
+ }
}