@Test public void testMultiplyDiagonal() { final Matrix4 mat4A = new Matrix4(); Matrix4 result = mat4A.multiplyDiagonalPost(new Vector4(2, 4, 6, 8), null); assertEquals(new Matrix4( // 2, 0, 0, 0, // 0, 4, 0, 0, // 0, 0, 6, 0, // 0, 0, 0, 8), result); mat4A.multiplyDiagonalPre(new Vector4(-2, -4, -6, -8), result); assertEquals(new Matrix4( // -2, 0, 0, 0, // 0, -4, 0, 0, // 0, 0, -6, 0, // 0, 0, 0, -8), result); final double a = MathUtils.HALF_PI; mat4A.applyRotationY(a); mat4A.multiplyDiagonalPost(new Vector4(2, 4, 6, 8), result); assertEquals(new Matrix4( // 2 * Math.cos(a), 4 * 0, 6 * Math.sin(a), 8 * 0, // 2 * 0, 4 * 1, 6 * 0, 8 * 0, // 2 * -Math.sin(a), 4 * 0, 6 * Math.cos(a), 8 * 0, // 2 * 0, 4 * 0, 6 * 0, 8 * 1), result); result = mat4A.multiplyDiagonalPre(new Vector4(-2, -4, -6, -8), null); assertEquals(new Matrix4( // -2 * Math.cos(a), -2 * 0, -2 * Math.sin(a), -2 * 0, // -4 * 0, -4 * 1, -4 * 0, -4 * 0, // -6 * -Math.sin(a), -6 * 0, -6 * Math.cos(a), -6 * 0, // -8 * 0, -8 * 0, -8 * 0, -8 * 1), result); }
@Test public void testRotations() { final Vector4 rotated = new Vector4(); final Vector4 expected = new Vector4(); final Matrix4 worker = new Matrix4(); // test axis rotation methods against general purpose // X AXIS expected.set(1, 1, 1, 1); rotated.set(1, 1, 1, 1); worker.setIdentity().applyRotationX(MathUtils.QUARTER_PI).applyPost(expected, expected); worker.setIdentity().applyRotation(MathUtils.QUARTER_PI, 1, 0, 0).applyPost(rotated, rotated); assertTrue(rotated.distance(expected) <= MathUtils.EPSILON); // Y AXIS expected.set(1, 1, 1, 1); rotated.set(1, 1, 1, 1); worker.setIdentity().applyRotationY(MathUtils.QUARTER_PI).applyPost(expected, expected); worker.setIdentity().applyRotation(MathUtils.QUARTER_PI, 0, 1, 0).applyPost(rotated, rotated); assertTrue(rotated.distance(expected) <= MathUtils.EPSILON); // Z AXIS expected.set(1, 1, 1, 1); rotated.set(1, 1, 1, 1); worker.setIdentity().applyRotationZ(MathUtils.QUARTER_PI).applyPost(expected, expected); worker.setIdentity().applyRotation(MathUtils.QUARTER_PI, 0, 0, 1).applyPost(rotated, rotated); assertTrue(rotated.distance(expected) <= MathUtils.EPSILON); }