@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()); } }
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()));
@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()); } }
@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()); } }
@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()); } }
assertEquals(expectedLength, actualLength, getEpsilon()); vector1.setAndScale(EuclidCoreRandomTools.nextDouble(random, 0.0, 10.0), vector2); vector1.normalize(); EuclidCoreTestTools.assertTuple3DEquals(vector1, vector2, getEpsilon()); assertEquals(expectedLength, actualLength, getEpsilon()); vector3.setAndScale(EuclidCoreRandomTools.nextDouble(random, 0.0, 10.0), vector2); vector1.setAndNormalize(vector3); EuclidCoreTestTools.assertTuple3DEquals(vector1, vector2, getEpsilon());
actual.set(original); actual.applyTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, getEpsilon()); actual.set(original); actual.applyTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, getEpsilon()); actual.set(original); actual.applyTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 10.0 * getEpsilon());
assertEquals(expectedCrossMagnitude, actualCrossMagnitude, 10.0 * getEpsilon()); assertEquals(0.0, vector1.dot(vector3), 10.0 * getEpsilon()); assertEquals(0.0, vector2.dot(vector3), 10.0 * getEpsilon()); actualVector.cross(vector2); EuclidCoreTestTools.assertTuple3DEquals(expectedVector, actualVector, getEpsilon());
actual.applyTransform(transform); actual.applyInverseTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 10.0 * getEpsilon()); actual.applyTransform(transform); actual.applyInverseTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 10.0 * getEpsilon()); actual.applyTransform(transform); actual.applyInverseTransform(transform); EuclidCoreTestTools.assertTuple3DEquals(expected, actual, 100.0 * getEpsilon());
EuclidCoreTestTools.assertTuple3DEquals("Iteration: " + i + ", maxLength: " + maxLength, expectedVector, actualVector, 5.0 * getEpsilon());