@Test public void testLengthSquared() { Random random = new Random(312310L); for (int i = 0; i < ITERATIONS; i++) { T vector1 = createRandomTuple(random); double length1 = vector1.length(); T vector2 = createEmptyTuple(); double scalar = EuclidCoreRandomTools.nextDouble(random, 0.0, 10.0); vector2.setAndScale(scalar, vector1); double expectedLength2 = scalar * length1; double actualLength2 = vector2.lengthSquared(); assertEquals(expectedLength2, Math.sqrt(actualLength2), 5.0 * getEpsilon()); } }
T expectedVector = createTuple(1.0, 0.0, 0.0); RotationMatrix rotationMatrix = EuclidCoreRandomTools.nextRotationMatrix(random); rotationMatrix.transform(expectedVector, expectedVector); T actualVector = createEmptyTuple(); actualVector.setAndScale(vectorLength, expectedVector); EuclidCoreTestTools.assertTuple3DEquals("Iteration: " + i + ", maxLength: " + maxLength, expectedVector, actualVector, 5.0 * getEpsilon()); T actualVector = createTuple(vectorLength, 0.0, 0.0); RotationMatrix rotationMatrix = EuclidCoreRandomTools.nextRotationMatrix(random); rotationMatrix.transform(actualVector, actualVector);
@Override @Test public void testGeometricallyEquals() throws Exception { super.testGeometricallyEquals(); Vector3D vectorA; Vector3D vectorB; Random random = new Random(621541L); for (int i = 0; i < 100; ++i) { vectorA = EuclidCoreRandomTools.nextVector3D(random); vectorB = EuclidCoreRandomTools.nextVector3D(random); if (((Vector3DReadOnly) vectorA).geometricallyEquals(vectorB, getEpsilon())) { assertTrue(vectorA.geometricallyEquals(vectorB, getEpsilon())); } else { assertFalse(vectorA.geometricallyEquals(vectorB, getEpsilon())); } } }
if (vectorA.epsilonEquals(vectorB, getEpsilon())) assertTrue(vectorA.geometricallyEquals(vectorB, Math.sqrt(3) * getEpsilon())); + (vectorA.getZ() - vectorB.getZ()) * (vectorA.getZ() - vectorB.getZ())) <= getEpsilon()) assertTrue(vectorA.geometricallyEquals(vectorB, getEpsilon())); assertFalse(vectorA.geometricallyEquals(vectorB, getEpsilon())); vectorB.set(vectorA.getX() + 0.9d * getEpsilon(), vectorA.getY(), vectorA.getZ()); assertTrue(vectorA.geometricallyEquals(vectorB, getEpsilon())); vectorB.set(vectorA.getX() + 1.1d * getEpsilon(), vectorA.getY(), vectorA.getZ()); assertFalse(vectorA.geometricallyEquals(vectorB, getEpsilon())); vectorB.set(vectorA.getX(), vectorA.getY() + 0.9d * getEpsilon(), vectorA.getZ()); assertTrue(vectorA.geometricallyEquals(vectorB, getEpsilon())); vectorB.set(vectorA.getX(), vectorA.getY() + 1.1d * getEpsilon(), vectorA.getZ()); assertFalse(vectorA.geometricallyEquals(vectorB, getEpsilon())); vectorB.set(vectorA.getX(), vectorA.getY(), vectorA.getZ() + 0.9d * getEpsilon()); assertTrue(vectorA.geometricallyEquals(vectorB, getEpsilon()));
@Override public void testSetters() throws Exception { super.testSetters(); Random random = new Random(621541L); Vector3D32 tuple1 = createEmptyTuple(); for (int i = 0; i < ITERATIONS; i++) { // Test setX(float x) float x = random.nextFloat(); tuple1.setX(x); assertEquals(tuple1.getX32(), x, getEpsilon()); } for (int i = 0; i < ITERATIONS; i++) { // Test setY(float y) float y = random.nextFloat(); tuple1.setY(y); assertEquals(tuple1.getY32(), y, getEpsilon()); } for (int i = 0; i < ITERATIONS; i++) { // Test setZ(float z) float z = random.nextFloat(); tuple1.setZ(z); assertEquals(tuple1.getZ32(), z, getEpsilon()); } }
@Override @Test public void testGeometricallyEquals() throws Exception { super.testGeometricallyEquals(); Vector3D32 vectorA; Vector3D32 vectorB; Random random = new Random(621541L); for (int i = 0; i < 100; ++i) { vectorA = EuclidCoreRandomTools.nextVector3D32(random); vectorB = EuclidCoreRandomTools.nextVector3D32(random); if (((Vector3DReadOnly) vectorA).geometricallyEquals(vectorB, getEpsilon())) { assertTrue(vectorA.geometricallyEquals(vectorB, getEpsilon())); } else { assertFalse(vectorA.geometricallyEquals(vectorB, getEpsilon())); } } }
@Test public void testLength() { Random random = new Random(312310L); for (int i = 0; i < ITERATIONS; i++) { T vector1 = createRandomTuple(random); double length1 = vector1.length(); T vector2 = createEmptyTuple(); double scalar = EuclidCoreRandomTools.nextDouble(random, 0.0, 10.0); vector2.setAndScale(scalar, vector1); double expectedLength2 = scalar * length1; double actualLength2 = vector2.length(); assertEquals(expectedLength2, actualLength2, 5.0 * getEpsilon()); } }
T original = createRandomTuple(random); T expected = createEmptyTuple(); T actual = createEmptyTuple(); actual.set(original); actual.applyTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, getEpsilon()); T original = createRandomTuple(random); T expected = createEmptyTuple(); T actual = createEmptyTuple(); actual.set(original); actual.applyTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, getEpsilon()); T original = createRandomTuple(random); T expected = createEmptyTuple(); T actual = createEmptyTuple(); actual.set(original); actual.applyTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 10.0 * getEpsilon());
T original = createRandomTuple(random); T expected = createEmptyTuple(); T actual = createEmptyTuple(); actual.applyTransform(transform); actual.applyInverseTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 10.0 * getEpsilon()); T original = createRandomTuple(random); T expected = createEmptyTuple(); T actual = createEmptyTuple(); actual.applyTransform(transform); actual.applyInverseTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 10.0 * getEpsilon()); EuclidCoreRandomTools.nextDouble(random, 0.01, 10.0)), EuclidCoreRandomTools.nextPoint3D(random, 10.0)); T original = createRandomTuple(random); T expected = createEmptyTuple(); T actual = createEmptyTuple(); actual.applyTransform(transform); actual.applyInverseTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 100.0 * getEpsilon());
@Test public void testAngle() { Random random = new Random(56461L); for (int i = 0; i < ITERATIONS; i++) { T vector1 = createRandomTuple(random); vector1.scale(EuclidCoreRandomTools.nextDouble(random, 2.0)); Vector3DBasics axis = EuclidCoreRandomTools.nextOrthogonalVector3D(random, vector1, true); double expectedAngle = EuclidCoreRandomTools.nextDouble(random, 0.01, Math.PI - 0.01); if (random.nextBoolean()) expectedAngle = -expectedAngle; T vector2 = createEmptyTuple(); RotationMatrix rotationMatrix = new RotationMatrix(new AxisAngle(axis, expectedAngle)); rotationMatrix.transform(vector1, vector2); vector2.scale(EuclidCoreRandomTools.nextDouble(random, 0.0, 2.0)); double actualAngle = vector1.angle(vector2); assertEquals(Math.abs(expectedAngle), actualAngle, 10.0 * getEpsilon()); } }
T vector1 = createRandomTuple(random); vector1.normalize(); assertEquals(expectedLength, actualLength, getEpsilon()); T vector2 = createRandomTuple(random); vector2.normalize(); vector1.setAndScale(EuclidCoreRandomTools.nextDouble(random, 0.0, 10.0), vector2); vector1.normalize(); EuclidCoreTestTools.assertTuple3DEquals(vector1, vector2, getEpsilon()); T vector1 = createRandomTuple(random); T vector2 = createEmptyTuple(); assertEquals(expectedLength, actualLength, getEpsilon()); vector2 = createRandomTuple(random); vector2.normalize(); T vector3 = createEmptyTuple(); vector3.setAndScale(EuclidCoreRandomTools.nextDouble(random, 0.0, 10.0), vector2); vector1.setAndNormalize(vector3); EuclidCoreTestTools.assertTuple3DEquals(vector1, vector2, getEpsilon());
@Test public void testDot() { Random random = new Random(5461L); for (int i = 0; i < ITERATIONS; i++) { T vector1 = createRandomTuple(random); vector1.scale(EuclidCoreRandomTools.nextDouble(random, 2.0)); Vector3DBasics axis = EuclidCoreRandomTools.nextOrthogonalVector3D(random, vector1, true); double angle = EuclidCoreRandomTools.nextDouble(random, 0.1, Math.PI); if (random.nextBoolean()) angle = -angle; T vector2 = createEmptyTuple(); RotationMatrix rotationMatrix = new RotationMatrix(new AxisAngle(axis, angle)); rotationMatrix.transform(vector1, vector2); vector2.scale(EuclidCoreRandomTools.nextDouble(random, 0.0, 2.0)); double expectedDot = vector1.length() * vector2.length() * Math.cos(angle); double actualDot = vector1.dot(vector2); assertEquals(expectedDot, actualDot, 10.0 * getEpsilon()); } }
T vector1 = createRandomTuple(random); vector1.scale(EuclidCoreRandomTools.nextDouble(random, 0.01, 2.0)); Vector3DBasics axis = EuclidCoreRandomTools.nextOrthogonalVector3D(random, vector1, true); double angle = EuclidCoreRandomTools.nextDouble(random, 0.01, Math.PI - 0.01); T vector2 = createEmptyTuple(); RotationMatrix rotationMatrix = new RotationMatrix(new AxisAngle(axis, angle)); rotationMatrix.transform(vector1, vector2); T vector3 = createEmptyTuple(); vector3.cross(vector1, vector2); assertEquals(expectedCrossMagnitude, actualCrossMagnitude, 10.0 * getEpsilon()); assertEquals(0.0, vector1.dot(vector3), 10.0 * getEpsilon()); assertEquals(0.0, vector2.dot(vector3), 10.0 * getEpsilon()); T vector1 = createRandomTuple(random); vector1.scale(EuclidCoreRandomTools.nextDouble(random, 2.0)); Vector3DBasics axis = EuclidCoreRandomTools.nextOrthogonalVector3D(random, vector1, true); double angle = EuclidCoreRandomTools.nextDouble(random, 0.0, Math.PI); T vector2 = createEmptyTuple(); RotationMatrix rotationMatrix = new RotationMatrix(new AxisAngle(axis, angle)); rotationMatrix.transform(vector1, vector2); vector2.scale(EuclidCoreRandomTools.nextDouble(random, 0.0, 2.0)); T expectedVector = createEmptyTuple(); expectedVector.cross(vector1, vector2);