summaryrefslogtreecommitdiffstats
path: root/src/jake2/util
diff options
context:
space:
mode:
authorHolger Zickner <[email protected]>2004-07-08 20:24:48 +0000
committerHolger Zickner <[email protected]>2004-07-08 20:24:48 +0000
commit252832999fa43bce63ca4b643fab5d9dd51fccc4 (patch)
tree98570c65819059d14f0809ae964aa1c6c93684a0 /src/jake2/util
parent4f13ea26c4f47e54e66926f0700cf631e7bb3352 (diff)
import of Jake2 version cebit
Diffstat (limited to 'src/jake2/util')
-rw-r--r--src/jake2/util/Math3D.java105
1 files changed, 56 insertions, 49 deletions
diff --git a/src/jake2/util/Math3D.java b/src/jake2/util/Math3D.java
index 6c607b3..fcdeaee 100644
--- a/src/jake2/util/Math3D.java
+++ b/src/jake2/util/Math3D.java
@@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
// Created on 09.12.2003 by RST.
-// $Id: Math3D.java,v 1.2 2004-07-08 15:58:48 hzi Exp $
+// $Id: Math3D.java,v 1.3 2004-07-08 20:24:31 hzi Exp $
package jake2.util;
@@ -33,8 +33,9 @@ public class Math3D extends Lib {
static final float piratio = (float)(Math.PI / 360.0);
public static void set(float v1[], float v2[]) {
- for (int i = 0; i < v1.length; i++)
- v1[i] = v2[i];
+ v1[0] = v2[0];
+ v1[1] = v2[1];
+ v1[2] = v2[2];
}
@@ -105,11 +106,10 @@ public class Math3D extends Lib {
to[2] = veca[2] + scale * vecb[2];
}
public static final float VectorNormalize(float[] v) {
- float length, ilength;
- length = VectorLength(v);
+ float length = VectorLength(v);
if (length != 0.0f) {
- ilength = 1.0f / length;
+ float ilength = 1.0f / length;
v[0] *= ilength;
v[1] *= ilength;
v[2] *= ilength;
@@ -164,7 +164,7 @@ public class Math3D extends Lib {
}
public static void vectoangles(float[] value1, float[] angles) {
- float forward;
+
float yaw, pitch;
if (value1[1] == 0 && value1[0] == 0) {
@@ -184,7 +184,7 @@ public class Math3D extends Lib {
if (yaw < 0)
yaw += 360;
- forward = (float) Math.sqrt(value1[0] * value1[0] + value1[1] * value1[1]);
+ float forward = (float) Math.sqrt(value1[0] * value1[0] + value1[1] * value1[1]);
pitch = (int) (Math.atan2(value1[2], forward) * 180 / Math.PI);
if (pitch < 0)
pitch += 360;
@@ -195,13 +195,18 @@ public class Math3D extends Lib {
angles[Defines.ROLL] = 0;
}
- public static void RotatePointAroundVector(float[] dst, float[] dir, float[] point, float degrees) {
- float m[][] = new float[3][3];
- float im[][] = new float[3][3];
- float zrot[][] = new float[3][3];
- float tmpmat[][] = new float[3][3];
- float rot[][] = new float[3][3];
- int i;
+ private static float m[][] = new float[3][3];
+ private static float im[][] = new float[3][3];
+ private static float tmpmat[][] = new float[3][3];
+ private static float zrot[][] = new float[3][3];
+ public static void RotatePointAroundVector(float[] dst, float[] dir, float[] point, float degrees) {
+
+ //float m[][] = new float[3][3];
+ //float im[][] = new float[3][3];
+ //float zrot[][] = new float[3][3];
+ //float tmpmat[][] = new float[3][3];
+ //float rot[][] = new float[3][3];
+
float[] vr = { 0.0f, 0.0f, 0.0f };
float[] vup = { 0.0f, 0.0f, 0.0f };
float[] vf = { 0.0f, 0.0f, 0.0f };
@@ -225,29 +230,33 @@ public class Math3D extends Lib {
m[1][2] = vf[1];
m[2][2] = vf[2];
- Math3D.MatCopy(m, im); // achtung: src -> dst
+ //Math3D.MatCopy(m, im); // achtung: src -> dst
+ im[0][0] = m[0][0];
im[0][1] = m[1][0];
im[0][2] = m[2][0];
im[1][0] = m[0][1];
+ im[1][1] = m[1][1];
im[1][2] = m[2][1];
im[2][0] = m[0][2];
im[2][1] = m[1][2];
+ im[2][2] = m[2][2];
- Math3D.MatClear(zrot);
+ zrot[0][2] = zrot[1][2] = zrot[2][0] = zrot[2][1] = 0.0f;
- zrot[0][0] = zrot[1][1] = zrot[2][2] = 1.0F;
+ zrot[2][2] = 1.0F;
- zrot[0][0] = (float) Math.cos(Math3D.DEG2RAD(degrees));
+ zrot[0][0] = zrot[1][1] = (float) Math.cos(Math3D.DEG2RAD(degrees));
zrot[0][1] = (float) Math.sin(Math3D.DEG2RAD(degrees));
- zrot[1][0] = - (float) Math.sin(Math3D.DEG2RAD(degrees));
- zrot[1][1] = (float) Math.cos(Math3D.DEG2RAD(degrees));
+ zrot[1][0] = -zrot[0][1];
+ //zrot[1][0] = - (float) Math.sin(Math3D.DEG2RAD(degrees));
+ //zrot[1][1] = (float) Math.cos(Math3D.DEG2RAD(degrees));
Math3D.R_ConcatRotations(m, zrot, tmpmat);
- Math3D.R_ConcatRotations(tmpmat, im, rot);
+ Math3D.R_ConcatRotations(tmpmat, im, zrot);
- for (i = 0; i < 3; i++) {
- dst[i] = rot[i][0] * point[0] + rot[i][1] * point[1] + rot[i][2] * point[2];
+ for (int i = 0; i < 3; i++) {
+ dst[i] = zrot[i][0] * point[0] + zrot[i][1] * point[1] + zrot[i][2] * point[2];
}
}
@@ -328,7 +337,7 @@ public class Math3D extends Lib {
int pos;
int i;
float minelem = 1.0F;
- float tempvec[] = { 0.0f, 0.0f, 0.0f };
+
// find the smallest magnitude axially aligned vector
for (pos = 0, i = 0; i < 3; i++) {
@@ -337,7 +346,7 @@ public class Math3D extends Lib {
minelem = Math.abs(src[i]);
}
}
- tempvec[0] = tempvec[1] = tempvec[2] = 0.0F;
+ float tempvec[] = { 0.0f, 0.0f, 0.0f };
tempvec[pos] = 1.0F;
// project the point onto the plane defined by src
@@ -421,13 +430,11 @@ public class Math3D extends Lib {
}
// this is the slow, general version
+ private static float corners[][] = new float[2][3];
public static final int BoxOnPlaneSide2(float[] emins, float[] emaxs, cplane_t p) {
- int i;
- float dist1, dist2;
- int sides;
- float corners[][] = new float[2][3];
+
- for (i = 0; i < 3; i++) {
+ for (int i = 0; i < 3; i++) {
if (p.normal[i] < 0) {
corners[0][i] = emins[i];
corners[1][i] = emaxs[i];
@@ -437,9 +444,9 @@ public class Math3D extends Lib {
corners[0][i] = emaxs[i];
}
}
- dist1 = Math3D.DotProduct(p.normal, corners[0]) - p.dist;
- dist2 = Math3D.DotProduct(p.normal, corners[1]) - p.dist;
- sides = 0;
+ float dist1 = Math3D.DotProduct(p.normal, corners[0]) - p.dist;
+ float dist2 = Math3D.DotProduct(p.normal, corners[1]) - p.dist;
+ int sides = 0;
if (dist1 >= 0)
sides = 1;
if (dist2 < 0)
@@ -479,21 +486,21 @@ public class Math3D extends Lib {
}
}
- public static void MatClear(float m[][]) {
- m[0][0] = m[0][1] = m[0][2] = m[1][0] = m[1][1] = m[1][2] = m[2][0] = m[2][1] = m[2][2] = 0.0f;
- }
+// public static void MatClear(float m[][]) {
+// m[0][0] = m[0][1] = m[0][2] = m[1][0] = m[1][1] = m[1][2] = m[2][0] = m[2][1] = m[2][2] = 0.0f;
+// }
- private static final void MatCopy(float src[][], float dst[][]) {
- dst[0][0]=src[0][0];
- dst[0][1]=src[0][1];
- dst[0][2]=src[0][2];
- dst[1][0]=src[1][0];
- dst[1][1]=src[1][1];
- dst[1][2]=src[1][2];
- dst[2][0]=src[2][0];
- dst[2][1]=src[2][1];
- dst[2][2]=src[2][2];
- }
+// private static final void MatCopy(float src[][], float dst[][]) {
+// dst[0][0]=src[0][0];
+// dst[0][1]=src[0][1];
+// dst[0][2]=src[0][2];
+// dst[1][0]=src[1][0];
+// dst[1][1]=src[1][1];
+// dst[1][2]=src[1][2];
+// dst[2][0]=src[2][0];
+// dst[2][1]=src[2][1];
+// dst[2][2]=src[2][2];
+// }
public static void G_ProjectSource(float[] point, float[] distance, float[] forward, float[] right, float[] result) {
result[0] = point[0] + forward[0] * distance[0] + right[0] * distance[1];
@@ -503,7 +510,7 @@ public class Math3D extends Lib {
- public static float DotProduct(float[] x, float[] y) {
+ public static final float DotProduct(float[] x, float[] y) {
return x[0] * y[0] + x[1] * y[1] + x[2] * y[2];
}