package edu.stanford.rsl.conrad.geometry.test; import junit.framework.Assert; import org.junit.Test; import edu.stanford.rsl.conrad.geometry.Axis; import edu.stanford.rsl.conrad.geometry.Rotations; import edu.stanford.rsl.conrad.geometry.shapes.simple.Edge; import edu.stanford.rsl.conrad.geometry.shapes.simple.Plane3D; import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND; import edu.stanford.rsl.conrad.geometry.shapes.simple.StraightLine; import edu.stanford.rsl.conrad.geometry.shapes.simple.Triangle; import edu.stanford.rsl.conrad.geometry.transforms.ScaleRotate; import edu.stanford.rsl.conrad.geometry.transforms.Transform; import edu.stanford.rsl.conrad.geometry.transforms.Translation; public class SurfaceTests { @Test public void intersectPlaneTest(){ PointND one = new PointND(0, 0, 0); PointND two = new PointND(1, 1, 1); PointND three = new PointND(1, 0, 0); PointND result = new PointND(0, 1, 1); StraightLine line = new StraightLine(two, three.getAbstractVector()); Plane3D plane = new Plane3D(one, three.getAbstractVector()); Assert.assertEquals(plane.intersect(line).euclideanDistance(result), 0.0); } @Test public void triangleIntersectionTest(){ PointND one = new PointND(0, 0, 0); PointND two = new PointND(1, 0, 0); PointND three = new PointND(1, 1, 0); PointND inside = new PointND(0.9, 0.1, 0); PointND outside = new PointND(0.1, 0.9, 0); PointND result = new PointND(1, 1, 3); Edge through = new Edge(inside, result); Edge pass = new Edge(outside, result); Triangle triangle = new Triangle(one, two, three); Assert.assertEquals(triangle.getA(), one); Assert.assertEquals(triangle.getB(), two); Assert.assertEquals(triangle.getC(), three); PointND nohit = triangle.intersect(pass); Assert.assertEquals(null, nohit); PointND hit = triangle.intersect(through); Assert.assertEquals(inside, hit); } @Test public void translateTest(){ PointND one = new PointND(0, 0, 0); PointND two = new PointND(1, 0, 0); PointND three = new PointND(1, 1, 0); Transform transform = new Translation(1,1,1); PointND oneprime = transform.transform(one); PointND twoprime = transform.transform(two); PointND threeprime = transform.transform(three); Triangle triangle = new Triangle(one,two,three); triangle.applyTransform(transform); Assert.assertEquals(oneprime, triangle.getA()); Assert.assertEquals(twoprime, triangle.getB()); Assert.assertEquals(threeprime, triangle.getC()); } @Test public void rotateTest(){ PointND one = new PointND(0, 0, 0); PointND two = new PointND(1, 0, 0); PointND three = new PointND(1, 1, 0); Transform transform = new ScaleRotate(Rotations.createRotationMatrixAboutAxis(new Axis(1,1,1), 0.5)); PointND oneprime = transform.transform(one); PointND twoprime = transform.transform(two); PointND threeprime = transform.transform(three); Triangle triangle = new Triangle(one,two,three); triangle.applyTransform(transform); Assert.assertEquals(oneprime, triangle.getA()); Assert.assertEquals(twoprime, triangle.getB()); Assert.assertEquals(threeprime, triangle.getC()); } } /* * Copyright (C) 2010-2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */