From 880653d31a8f1ff8384fdbc75b84934bceecfdb8 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 18 Nov 2000 06:43:49 +0000 Subject: Initial revision --- demos/RonsDemos/MatrixFuncs.java | 200 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 demos/RonsDemos/MatrixFuncs.java (limited to 'demos/RonsDemos/MatrixFuncs.java') diff --git a/demos/RonsDemos/MatrixFuncs.java b/demos/RonsDemos/MatrixFuncs.java new file mode 100644 index 0000000..75493a2 --- /dev/null +++ b/demos/RonsDemos/MatrixFuncs.java @@ -0,0 +1,200 @@ +/** + * @(#) MatrixFuncs.java + * @(#) author: Ronald B. Cemer + * @(#) version: 1.0 + */ + +import java.io.*; + +public class MatrixFuncs +{ + public static final float M_PI = 3.14159265359f; + + // Given the angle in degs, create a 4x4 matrix + // in mtx which rotates around the X axis. + public void rotateAroundX(float degs, float mtx[]) + { + float rads, rsin, rcos; + + rads = degs*(M_PI/180.0f); + rsin = (float)Math.sin(rads); + rcos = (float)Math.cos(rads); + mtx[0] = 1.0f; + mtx[1] = 0.0f; + mtx[2] = 0.0f; + mtx[3] = 0.0f; + mtx[4] = 0.0f; + mtx[5] = rcos; + mtx[6] = rsin; + mtx[7] = 0.0f; + mtx[8] = 0.0f; + mtx[9] = -rsin; + mtx[10] = rcos; + mtx[11] = 0.0f; + mtx[12] = 0.0f; + mtx[13] = 0.0f; + mtx[14] = 0.0f; + mtx[15] = 1.0f; + } + + // Given the angle in degs, create a 4x4 matrix + // in mtx which rotates around the Y axis. + public void rotateAroundY(float degs, float mtx[]) + { + float rads, rsin, rcos; + + rads = degs*(M_PI/180.0f); + rsin = (float)Math.sin(rads); + rcos = (float)Math.cos(rads); + mtx[0] = rcos; + mtx[1] = 0.0f; + mtx[2] = -rsin; + mtx[3] = 0.0f; + mtx[4] = 0.0f; + mtx[5] = 1.0f; + mtx[6] = 0.0f; + mtx[7] = 0.0f; + mtx[8] = rsin; + mtx[9] = 0.0f; + mtx[10] = rcos; + mtx[11] = 0.0f; + mtx[12] = 0.0f; + mtx[13] = 0.0f; + mtx[14] = 0.0f; + mtx[15] = 1.0f; + } + + // Given the angle in degs, create a 4x4 matrix + // in mtx which rotates around the Z axis. + public void rotateAroundZ(float degs, float mtx[]) + { + float rads, rsin, rcos; + + rads = degs*(M_PI/180.0f); + rsin = (float)Math.sin(rads); + rcos = (float)Math.cos(rads); + mtx[0] = rcos; + mtx[1] = rsin; + mtx[2] = 0.0f; + mtx[3] = 0.0f; + mtx[4] = -rsin; + mtx[5] = rcos; + mtx[6] = 0.0f; + mtx[7] = 0.0f; + mtx[8] = 0.0f; + mtx[9] = 0.0f; + mtx[10] = 1.0f; + mtx[11] = 0.0f; + mtx[12] = 0.0f; + mtx[13] = 0.0f; + mtx[14] = 0.0f; + mtx[15] = 1.0f; + } + + // Given two 4x4 matrices in mtx1 and mtx2, multiply + // them and put the result in dest. + // This routine uses a temporary buffer for the result, + // so if dest is the same as mtx1 or mtx2, it will still + // work properly. + public void multiplyMatrices(float mtx1[], float mtx2[], float dest[]) + { + float nmtx[] = new float[16]; + + nmtx[0] = + (mtx1[0]*mtx2[0]) + + (mtx1[1]*mtx2[4]) + + (mtx1[2]*mtx2[8]) + + (mtx1[3]*mtx2[12]); + nmtx[1] = + (mtx1[0]*mtx2[1]) + + (mtx1[1]*mtx2[5]) + + (mtx1[2]*mtx2[9]) + + (mtx1[3]*mtx2[13]); + nmtx[2] = + (mtx1[0]*mtx2[2]) + + (mtx1[1]*mtx2[6]) + + (mtx1[2]*mtx2[10]) + + (mtx1[3]*mtx2[14]); + nmtx[3] = + (mtx1[0]*mtx2[3]) + + (mtx1[1]*mtx2[7]) + + (mtx1[2]*mtx2[11]) + + (mtx1[3]*mtx2[15]); + nmtx[4] = + (mtx1[4]*mtx2[0]) + + (mtx1[5]*mtx2[4]) + + (mtx1[6]*mtx2[8]) + + (mtx1[7]*mtx2[12]); + nmtx[5] = + (mtx1[4]*mtx2[1]) + + (mtx1[5]*mtx2[5]) + + (mtx1[6]*mtx2[9]) + + (mtx1[7]*mtx2[13]); + nmtx[6] = + (mtx1[4]*mtx2[2]) + + (mtx1[5]*mtx2[6]) + + (mtx1[6]*mtx2[10]) + + (mtx1[7]*mtx2[14]); + nmtx[7] = + (mtx1[4]*mtx2[3]) + + (mtx1[5]*mtx2[7]) + + (mtx1[6]*mtx2[11]) + + (mtx1[7]*mtx2[15]); + nmtx[8] = + (mtx1[8]*mtx2[0]) + + (mtx1[9]*mtx2[4]) + + (mtx1[10]*mtx2[8]) + + (mtx1[11]*mtx2[12]); + nmtx[9] = + (mtx1[8]*mtx2[1]) + + (mtx1[9]*mtx2[5]) + + (mtx1[10]*mtx2[9]) + + (mtx1[11]*mtx2[13]); + nmtx[10] = + (mtx1[8]*mtx2[2]) + + (mtx1[9]*mtx2[6]) + + (mtx1[10]*mtx2[10]) + + (mtx1[11]*mtx2[14]); + nmtx[11] = + (mtx1[8]*mtx2[3]) + + (mtx1[9]*mtx2[7]) + + (mtx1[10]*mtx2[11]) + + (mtx1[11]*mtx2[15]); + nmtx[12] = + (mtx1[12]*mtx2[0]) + + (mtx1[13]*mtx2[4]) + + (mtx1[14]*mtx2[8]) + + (mtx1[15]*mtx2[12]); + nmtx[13] = + (mtx1[12]*mtx2[1]) + + (mtx1[13]*mtx2[5]) + + (mtx1[14]*mtx2[9]) + + (mtx1[15]*mtx2[13]); + nmtx[14] = + (mtx1[12]*mtx2[2]) + + (mtx1[13]*mtx2[6]) + + (mtx1[14]*mtx2[10]) + + (mtx1[15]*mtx2[14]); + nmtx[15] = + (mtx1[12]*mtx2[3]) + + (mtx1[13]*mtx2[7]) + + (mtx1[14]*mtx2[11]) + + (mtx1[15]*mtx2[15]); + dest[0] = nmtx[0]; + dest[1] = nmtx[1]; + dest[2] = nmtx[2]; + dest[3] = nmtx[3]; + dest[4] = nmtx[4]; + dest[5] = nmtx[5]; + dest[6] = nmtx[6]; + dest[7] = nmtx[7]; + dest[8] = nmtx[8]; + dest[9] = nmtx[9]; + dest[10] = nmtx[10]; + dest[11] = nmtx[11]; + dest[12] = nmtx[12]; + dest[13] = nmtx[13]; + dest[14] = nmtx[14]; + dest[15] = nmtx[15]; + } +} -- cgit v1.2.3