/* * $Id$ * * Copyright (C) 2010-2012 Stephane GALLAND. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * This program is free software; you can redistribute it and/or modify */ /** * @author $Author: hjaffali$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ package org.arakhne.afc.math.geometry.d3.continuous; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import org.junit.Test; /** * @author $Author: hjaffali$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ public class Segment3fTest extends AbstractShape3fTestCase<AbstractSegment3F> { @Override protected AbstractSegment3F createShape() { return new Segment3f(Math.random(), Math.random(), Math.random(), Math.random(), Math.random(), Math.random()); } @Test @Override public void testClone() { AbstractSegment3F b = this.r.clone(); assertNotSame(b, this.r); assertEpsilonEquals(this.r.getX1(), b.getX1()); assertEpsilonEquals(this.r.getY1(), b.getY1()); assertEpsilonEquals(this.r.getZ1(), b.getZ1()); assertEpsilonEquals(this.r.getX2(), b.getX2()); assertEpsilonEquals(this.r.getY2(), b.getY2()); assertEpsilonEquals(this.r.getZ2(), b.getZ2()); assertTrue(this.r.getP1().equals(b.getP1())); assertTrue(this.r.getP2().equals(b.getP2())); assertTrue(this.r.getDirection().equals(b.getDirection())); } @Test @Override public void distancePoint3D() { AbstractSegment3F seg = new Segment3f(this.random.nextDouble()*20,this.random.nextDouble()*20,this.random.nextDouble()*20,this.random.nextDouble()*20,this.random.nextDouble()*20,this.random.nextDouble()*20); Point3f pnt = new Point3f(this.random.nextDouble()*20,this.random.nextDouble()*20,this.random.nextDouble()*20); Vector3f vect = new Vector3f(seg.getP1().getX()-pnt.getX(),seg.getP1().getY()-pnt.getY(),seg.getP1().getZ()-pnt.getZ()); double angle = vect.angle(seg.getDirection()); double distance = vect.length()*Math.sin(angle); assertEpsilonEquals(distance,seg.distanceLine(pnt)); } @Test @Override public void containsPoint3D() { AbstractSegment3F seg = new Segment3f(this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble()); Point3f p = new Point3f(this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble()); Vector3f v1 = new Vector3f(p.x-seg.getX1(),p.y-seg.getY1(),p.y-seg.getY1()); Vector3f v2 = new Vector3f(p.x-seg.getX1(),p.y-seg.getY1(),p.y-seg.getY1()); Vector3f v3 = (Vector3f) seg.getDirection(); assertTrue(v1.isColinear(v3)==seg.contains(p)); assertTrue(v2.isColinear(v3)==seg.contains(p)); } @Test @Override public void testEquals() { AbstractSegment3F seg = new Segment3f(this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble(),this.random.nextDouble()); AbstractSegment3F seg2 = seg.clone(); assertTrue(seg2.equals(seg)); } @Test @Override public void testHashCode() { throw new UnsupportedOperationException(); } @Test @Override public void toBoundingBox() { throw new UnsupportedOperationException(); } @Test @Override public void toBoundingBoxAlignedBox3x() { throw new UnsupportedOperationException(); } @Test @Override public void distanceSquaredPoint3D() { throw new UnsupportedOperationException(); } @Test @Override public void distanceL1Point3D() { throw new UnsupportedOperationException(); } @Test @Override public void distanceLinfPoint3D() { throw new UnsupportedOperationException(); } @Test @Override public void translateVector3D() { throw new UnsupportedOperationException(); } @Test @Override public void translateDoubleDoubleDouble() { throw new UnsupportedOperationException(); } @Test @Override public void containsDoubleDoubleDouble() { throw new UnsupportedOperationException(); } @Test @Override public void intersectsAlignedBox3x() { throw new UnsupportedOperationException(); } @Test @Override public void intersectsSphere3x() { throw new UnsupportedOperationException(); } @Test @Override public void intersectsSegment3x() { Segment3f s1 = new Segment3f(0,0,0,10,10,0); Segment3f s2 = new Segment3f(0,10,0,10,0,0); Segment3f s3 = new Segment3f(0,0,0,12,0,0); Segment3f s4 = new Segment3f(-3,7,14,12,-13,-13); Segment3f s5 = new Segment3f(0,1/2f,1/3f,1,1/2f,2/3f); Segment3f s6 = new Segment3f(-1/2f,2/3f,-1/3f,1/2f,-2/3f,1/3f); Segment3f s7 = new Segment3f(10,10,0,0,0,10); Segment3f s8 = new Segment3f(1,1,1,11,11,1); assertTrue(s1.intersects(s2)); assertTrue(s1.intersects(s3)); assertFalse(s1.intersects(s4)); assertFalse(s1.intersects(s5)); assertTrue(s1.intersects(s6)); assertTrue(s1.intersects(s7)); assertFalse(s1.intersects(s8)); assertTrue(s2.intersects(s3)); assertFalse(s2.intersects(s4)); assertFalse(s2.intersects(s5)); assertFalse(s2.intersects(s6)); assertFalse(s2.intersects(s7)); assertFalse(s2.intersects(s8)); assertFalse(s3.intersects(s4)); assertFalse(s3.intersects(s5)); assertTrue(s3.intersects(s6)); assertFalse(s3.intersects(s7)); assertFalse(s3.intersects(s8)); assertFalse(s4.intersects(s5)); assertFalse(s4.intersects(s6)); assertFalse(s4.intersects(s7)); assertFalse(s4.intersects(s8)); assertFalse(s5.intersects(s6)); assertFalse(s5.intersects(s7)); assertFalse(s5.intersects(s8)); assertFalse(s6.intersects(s7)); assertFalse(s6.intersects(s8)); assertTrue(s7.intersects(s8)); } @Test @Override public void intersectsTriangle3x() { Segment3f s1 = new Segment3f(0,0,0,10,10,0); AbstractTriangle3F t1 = new Triangle3f(10,10,0, 0,0,10, 10,10,10); assertTrue(s1.intersects(t1)); } @Test @Override public void intersectsCapsule3x() { throw new UnsupportedOperationException(); } @Test @Override public void intersectsOrientedBox3x() { throw new UnsupportedOperationException(); } @Test @Override public void intersectsAbstractPlane3D() { throw new UnsupportedOperationException(); } }