package com.jcwhatever.nucleus.internal.providers.math; import com.jcwhatever.nucleus.utils.coords.Vector3D; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * Test Nucleus default fast math rotation matrix implementation. */ public class NucleusRotationMatrixTest { @Test public void testMatrixLookup() { NucleusRotationMatrix matrix = NucleusRotationMatrix.get(-180); assertEquals(-180f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(180); assertEquals(180f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(-90); assertEquals(-90f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(90); assertEquals(90f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(0); assertEquals(0f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(-45); assertEquals(-45f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(45); assertEquals(45f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(360); assertEquals(0f, matrix.getRotation(), 0.0f); matrix = NucleusRotationMatrix.get(-360); assertEquals(0f, matrix.getRotation(), 0.0f); } @Test public void testRotate3dX() throws Exception { NucleusRotationMatrix matrix = new NucleusRotationMatrix(90); Vector3D vector = new Vector3D(1, 1, 1); matrix.rotateX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(1, 1, 1); matrix.rotateX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(0); vector = new Vector3D(1, 1, 1); matrix.rotateX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(90); vector = new Vector3D(0, 0, 1); matrix.rotateX(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(0, 0, 1); matrix.rotateX(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(0, 0, 1); matrix.rotateX(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(1, 1, 1); matrix.rotateX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); } @Test public void testRotateReverse3dX() throws Exception { NucleusRotationMatrix matrix = new NucleusRotationMatrix(90); Vector3D vector = new Vector3D(1, 1, 1); matrix.rotateReverseX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(1, 1, 1); matrix.rotateReverseX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(0); vector = new Vector3D(1, 1, 1); matrix.rotateReverseX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(90); vector = new Vector3D(0, 0, 1); matrix.rotateReverseX(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(0, 0, 1); matrix.rotateReverseX(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(0, 0, 1); matrix.rotateReverseX(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(1, 1, 1); matrix.rotateReverseX(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); } @Test public void testRotate3dY() throws Exception { NucleusRotationMatrix matrix = new NucleusRotationMatrix(90); Vector3D vector = new Vector3D(1, 0, 0); matrix.rotateY(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(1, 0, 0); matrix.rotateY(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(0); vector = new Vector3D(1, 0, 0); matrix.rotateY(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(90); vector = new Vector3D(0, 0, 1); matrix.rotateY(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(0, 0, 1); matrix.rotateY(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(0, 0, 1); matrix.rotateY(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(1, 1, 1); matrix.rotateY(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); } @Test public void testRotateReverse3dY() throws Exception { NucleusRotationMatrix matrix = new NucleusRotationMatrix(90); Vector3D vector = new Vector3D(1, 0, 0); matrix.rotateReverseY(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(1, 0, 0); matrix.rotateReverseY(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(0); vector = new Vector3D(1, 0, 0); matrix.rotateReverseY(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(90); vector = new Vector3D(0, 0, 1); matrix.rotateReverseY(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(0, 0, 1); matrix.rotateReverseY(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(1, 1, 1); matrix.rotateReverseY(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(-1, vector.getZ(), 0.0001D); } @Test public void testRotate3dZ() throws Exception { NucleusRotationMatrix matrix = new NucleusRotationMatrix(90); Vector3D vector = new Vector3D(1, 1, 1); matrix.rotateZ(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(1, 1, 1); matrix.rotateZ(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(0); vector = new Vector3D(1, 1, 1); matrix.rotateZ(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(90); vector = new Vector3D(0, 1, 0); matrix.rotateZ(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(0, 1, 0); matrix.rotateZ(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(0, 1, 0); matrix.rotateZ(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(1, 1, 1); matrix.rotateZ(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); } @Test public void testRotateReverse3dZ() throws Exception { NucleusRotationMatrix matrix = new NucleusRotationMatrix(90); Vector3D vector = new Vector3D(1, 1, 1); matrix.rotateReverseZ(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(1, 1, 1); matrix.rotateReverseZ(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(0); vector = new Vector3D(1, 1, 1); matrix.rotateReverseZ(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(90); vector = new Vector3D(0, 1, 0); matrix.rotateReverseZ(vector, vector); assertEquals(1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(-90); vector = new Vector3D(0, 1, 0); matrix.rotateReverseZ(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(0, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(0, 1, 0); matrix.rotateReverseZ(vector, vector); assertEquals(0, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(0, vector.getZ(), 0.0001D); matrix = new NucleusRotationMatrix(180); vector = new Vector3D(1, 1, 1); matrix.rotateReverseZ(vector, vector); assertEquals(-1, vector.getX(), 0.0001D); assertEquals(-1, vector.getY(), 0.0001D); assertEquals(1, vector.getZ(), 0.0001D); } }