@Test
public void testTransformWithVector4D() throws Exception
{
Random random = new Random(5634L);
AffineTransform transform = EuclidCoreRandomTools.nextAffineTransform(random);
Vector4D vectorOriginal = EuclidCoreRandomTools.nextVector4D(random);
Vector4D vectorExpected = new Vector4D();
Vector4D vectorActual = new Vector4D();
Vector3D vector3D = new Vector3D(vectorOriginal.getX(), vectorOriginal.getY(), vectorOriginal.getZ());
transform.transform(vector3D);
vectorExpected.set(vector3D);
vectorExpected.setS(vectorOriginal.getS());
vectorExpected.addX(vectorExpected.getS() * transform.getM03());
vectorExpected.addY(vectorExpected.getS() * transform.getM13());
vectorExpected.addZ(vectorExpected.getS() * transform.getM23());
transform.transform(vectorOriginal, vectorActual);
EuclidCoreTestTools.assertTuple4DEquals(vectorExpected, vectorActual, EPS);
vectorActual.set(vectorOriginal);
transform.transform(vectorActual);
EuclidCoreTestTools.assertTuple4DEquals(vectorExpected, vectorActual, EPS);
DenseMatrix64F transformDenseMatrix = new DenseMatrix64F(4, 4);
transform.get(transformDenseMatrix);
DenseMatrix64F vectorOriginalDenseMatrix = new DenseMatrix64F(4, 1);
vectorOriginal.get(vectorOriginalDenseMatrix);
DenseMatrix64F vectorTransformedDenseMatrix = new DenseMatrix64F(4, 1);
CommonOps.mult(transformDenseMatrix, vectorOriginalDenseMatrix, vectorTransformedDenseMatrix);
vectorExpected.set(vectorTransformedDenseMatrix);
EuclidCoreTestTools.assertTuple4DEquals(vectorExpected, vectorActual, EPS);
}