/* * Copyright (C) 2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */ package edu.stanford.rsl.conrad.geometry.transforms.test; import org.junit.Assert; import org.junit.Test; import edu.stanford.rsl.conrad.geometry.Rotations; import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND; import edu.stanford.rsl.conrad.geometry.transforms.ComboTransform; import edu.stanford.rsl.conrad.geometry.transforms.ScaleRotate; import edu.stanford.rsl.conrad.geometry.transforms.Translation; import edu.stanford.rsl.conrad.numerics.SimpleMatrix; import edu.stanford.rsl.conrad.numerics.SimpleOperators; import edu.stanford.rsl.conrad.numerics.SimpleMatrix.MatrixNormType; import edu.stanford.rsl.conrad.numerics.SimpleVector; import edu.stanford.rsl.conrad.utils.CONRAD; public class TestTransform { /** * A few tests to ensure that the extraction of the rotational part works */ @Test public void testRotation(){ SimpleMatrix rot =Rotations.createRotationMatrixAboutAxis(new SimpleVector(Math.random(), Math.random(), Math.random()), Math.random()*Math.PI); ScaleRotate scaleRotate = new ScaleRotate(rot); SimpleMatrix test1 = scaleRotate.getRotation(3); test1.subtract(rot); double error = test1.norm(MatrixNormType.MAT_NORM_FROBENIUS); Assert.assertTrue(Math.abs(error) < CONRAD.DOUBLE_EPSILON); Translation translations = new Translation(Math.random(), Math.random(), Math.random()); ComboTransform comboTransform = new ComboTransform(scaleRotate, translations); test1 = comboTransform.getRotation(3); test1.subtract(rot); error = test1.norm(MatrixNormType.MAT_NORM_FROBENIUS); Assert.assertTrue(Math.abs(error) < CONRAD.DOUBLE_EPSILON); comboTransform = new ComboTransform(translations, scaleRotate, translations); test1 = comboTransform.getRotation(3); test1.subtract(rot); error = test1.norm(MatrixNormType.MAT_NORM_FROBENIUS); Assert.assertTrue(Math.abs(error) < CONRAD.DOUBLE_EPSILON); SimpleMatrix twiceMatrix = SimpleOperators.multiplyMatrixProd(rot, rot); comboTransform = new ComboTransform(translations, scaleRotate, translations, scaleRotate); test1 = comboTransform.getRotation(3); test1.subtract(twiceMatrix); error = test1.norm(MatrixNormType.MAT_NORM_FROBENIUS); Assert.assertTrue(Math.abs(error) < CONRAD.DOUBLE_EPSILON); } /** * A few tests to ensure that the extraction of the translational part works */ @Test public void testTranslation(){ SimpleMatrix rot =Rotations.createRotationMatrixAboutAxis(new SimpleVector(Math.random(), Math.random(), Math.random()), Math.random()*Math.PI); ScaleRotate scaleRotate = new ScaleRotate(rot); SimpleVector test1 = scaleRotate.getTranslation(3); test1.subtract(new SimpleVector(0,0,0)); double error = test1.normL2(); Assert.assertTrue(Math.abs(error) < CONRAD.DOUBLE_EPSILON); Translation translations = new Translation(Math.random(), Math.random(), Math.random()); ComboTransform comboTransform = new ComboTransform(scaleRotate, translations); test1 = comboTransform.getTranslation(3); test1.subtract(translations.getData()); error = test1.normL2(); Assert.assertTrue(Math.abs(error) < CONRAD.DOUBLE_EPSILON); SimpleVector translation = null; comboTransform = new ComboTransform(translations, scaleRotate, translations); test1 = comboTransform.getTranslation(3); PointND point = new PointND(Math.random(),Math.random(),Math.random()); translation = comboTransform.transform(point).getAbstractVector(); translation.subtract(SimpleOperators.multiply(rot, point.getAbstractVector())); test1.subtract(translation); error = test1.normL2(); Assert.assertTrue(Math.abs(error) < CONRAD.FLOAT_EPSILON); comboTransform = new ComboTransform(translations, scaleRotate, translations, scaleRotate); test1 = comboTransform.getTranslation(3); point = new PointND(Math.random(),Math.random(),Math.random()); translation = comboTransform.transform(point).getAbstractVector(); translation.subtract(SimpleOperators.multiply(comboTransform.getRotation(3), point.getAbstractVector())); test1.subtract(translation); error = test1.normL2(); Assert.assertTrue(Math.abs(error) < CONRAD.FLOAT_EPSILON); } }