/* * Copyright (C) 2010-2014 Andreas Maier, Rotimi X Ojo * 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.shapes.simple.PointND; import edu.stanford.rsl.conrad.geometry.transforms.AffineTransform; import edu.stanford.rsl.conrad.numerics.SimpleMatrix; import edu.stanford.rsl.conrad.numerics.SimpleOperators; import edu.stanford.rsl.conrad.numerics.SimpleVector; import edu.stanford.rsl.conrad.utils.CONRAD; import edu.stanford.rsl.conrad.utils.TestingTools; /** * Class to test the accuracy of the {@link AffineTransform} class * * @see AffineTransform * @author Rotimi X Ojo */ public class TestAffineTransform { @Test public void affineTest(){ System.out.println("Testing Affine class"); SimpleVector translator = TestingTools.randVector(3); SimpleVector oldDir = TestingTools.randVector(3); SimpleMatrix randmatrix = TestingTools.randUpperTriangularMatrix(3, 3); AffineTransform aff = new AffineTransform(randmatrix, translator); //Transform direction SimpleVector newDir = aff.transform(oldDir); assert(SimpleOperators.equalElementWise(newDir,SimpleOperators.multiply(randmatrix, oldDir),0)); //Transform Point PointND oldPoint = new PointND(oldDir); PointND newP = aff.transform(oldPoint); assert(SimpleOperators.equalElementWise(newP.getAbstractVector(),SimpleOperators.add(SimpleOperators.multiply(randmatrix, oldDir),translator),0)); //Inverse Transform AffineTransform invaff = aff.inverse(); //Invert new Direction Assert.assertTrue(SimpleOperators.equalElementWise(invaff.transform(newDir),oldDir,CONRAD.SMALL_VALUE)); //Invert new Point Assert.assertTrue(SimpleOperators.equalElementWise(invaff.transform(newP).getAbstractVector(),oldPoint.getAbstractVector(),CONRAD.SMALL_VALUE)); } @Test public void testMinMaxConstructor(){ for (int i = 0; i < 1000; i++) { PointND beforePoint1 = new PointND(Math.random(), Math.random(), Math.random()); PointND beforePoint2 = new PointND(Math.random(), Math.random(), Math.random()); PointND afterPoint1 = new PointND(Math.random(), Math.random(), Math.random()); PointND afterPoint2 = new PointND(Math.random(), Math.random(), Math.random()); AffineTransform testTransform = new AffineTransform(beforePoint1, beforePoint2, afterPoint1, afterPoint2); PointND transformedPoint1 = testTransform.transform(beforePoint1); PointND transformedPoint2 = testTransform.transform(beforePoint2); Assert.assertTrue(transformedPoint1.euclideanDistance(afterPoint1) < CONRAD.SMALL_VALUE && transformedPoint2.euclideanDistance(afterPoint2) < CONRAD.SMALL_VALUE); } } }