/*
* $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
*/
package org.arakhne.afc.math.geometry.d3.continuous;
import static org.junit.Assert.*;
import org.arakhne.afc.math.AbstractMathTestCase;
import org.arakhne.afc.math.geometry.d3.FunctionalPoint3D;
import org.arakhne.afc.math.geometry.d3.Point3D;
import org.arakhne.afc.math.geometry.d3.Tuple3D;
import org.arakhne.afc.math.geometry.d3.Vector3D;
import org.junit.Test;
/**
* @author $Author: hjaffali$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("all")
public class Point3fTest extends AbstractMathTestCase {
@Test
public void testClone() {
Point3f point = this.randomPoint3f();
Point3f pointClone = point.clone();
assertTrue(point.equals(pointClone));
}
@Test
public void distanceSquaredPoint3D() {
int tab[] = {1,2,3};
Point3f point = new Point3f(1.0,2.0,3.0);
Point3f point2 = new Point3f(tab);
Point3f point3 = new Point3f(0,0,0);
Point3f point4 = new Point3f(-1,0,1);
assertEpsilonEquals(14,point.distanceSquared(point3));
assertEpsilonEquals(0,point.distanceSquared(point2));
assertEpsilonEquals(0,point2.distanceSquared(point));
assertEpsilonEquals(12,point.distanceSquared(point4));
}
@Test
public void distancePoint3D() {
int tab[] = {1,2,3};
Point3f point = new Point3f(1.0,2.0,3.0);
Point3f point2 = new Point3f(tab);
Point3f point3 = new Point3f(0,0,0);
Point3f point4 = new Point3f(-1,0,1);
assertEpsilonEquals(3,point.distance(point3));
assertEpsilonEquals(0,point.distance(point2));
assertEpsilonEquals(0,point2.distance(point));
assertEpsilonEquals(3,point.distance(point4));
}
@Test
public void distanceL1Point3D() {
Point3f point = new Point3f(1.0,2.0,3.0);
Point3f point2 = new Point3f(point);
Point3D point3 = new Point3f(0,0,0);
Point3D point4 = new Point3f(-1,0,1);
assertTrue(point.equals(point2));
assertEpsilonEquals(6,point.distanceL1(point3));
assertEpsilonEquals(0,point.distanceL1(point2));
assertEpsilonEquals(0,point2.distanceL1(point));
assertEpsilonEquals(6,point.distanceL1(point4));
}
@Test
public void distanceLinfPoint3D() {
int tab[] = {1,2,3};
Point3f point = new Point3f(1.0,2.0,3.0);
Point3f point2 = new Point3f(tab);
Point3f point3 = new Point3f(0,0,0);
Point3f point4 = new Point3f(-1,0,1);
assertEpsilonEquals(3,point.distanceLinf(point3));
assertEpsilonEquals(0,point.distanceLinf(point2));
assertEpsilonEquals(0,point2.distanceLinf(point));
assertEpsilonEquals(2,point.distanceLinf(point4));
}
@Test
public void addPoint3DVector3D() {
Point3f point = new Point3f(0,0,0);
Point3f point2 = new Point3f(-1,0,1);
Vector3f vector = new Vector3f(1.2,1.2,1.2);
Vector3f vector2 = new Vector3f(2.0,1.5,5.125);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.add(point,vector);
assertTrue(newPoint.equals(new Point3f(1.2,1.2,1.2)));
newPoint.add(point2,vector2);
assertTrue(newPoint.equals(new Point3f(1.0,1.5,6.125)));
}
@Test
public void addVector3DPoint3D() {
Point3f point = new Point3f(0,0,0);
Point3f point2 = new Point3f(-1,0,1);
Vector3f vector = new Vector3f(1.2,1.2,1.2);
Vector3f vector2 = new Vector3f(2.0,1.5,5.125);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.add(vector,point);
assertTrue(newPoint.equals(new Point3f(1.2,1.2,1.2)));
newPoint.add(vector2,point2);
assertTrue(newPoint.equals(new Point3f(1.0,1.5,6.125)));
}
@Test
public void addVector3D() {
Point3f point = new Point3f(0,0,0);
Point3f point2 = new Point3f(-1,0,1);
Vector3f vector = new Vector3f(1.2,1.2,1.2);
Vector3f vector2 = new Vector3f(2.0,1.5,5.125);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
point.add(vector);
assertTrue(point.equals(new Point3f(1.2,1.2,1.2)));
point2.add(vector2);
assertTrue(point2.equals(new Point3f(1.0,1.5,6.125)));
}
@Test
public void scaleAddIntVector3DPoint3D() {
Point3f point = new Point3f(-1,0,1);
Vector3f vector = new Vector3f(1.0,1.2,1.0);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.scaleAdd(0,vector,point);
assertTrue(newPoint.equals(new Point3f(-1,0,1)));
newPoint.scaleAdd(1,vector,point);
assertTrue(newPoint.equals(new Point3f(0.0,1.2,2.0)));
newPoint.scaleAdd(-1,vector,point);
assertTrue(newPoint.equals(new Point3f(-2.0,-1.2,0.0)));
newPoint.scaleAdd(10,vector,point);
assertTrue(newPoint.equals(new Point3f(9,12,11)));
}
@Test
public void scaleAddDoubleVector3DPoint3D() {
Point3f point = new Point3f(1,0,1);
Vector3f vector = new Vector3f(-1,1,1);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.scaleAdd(0.0,vector,point);
assertTrue(newPoint.equals(new Point3f(1,0,1)));
newPoint.scaleAdd(1.5,vector,point);
assertTrue(newPoint.equals(new Point3f(-0.5,1.5,2.5)));
newPoint.scaleAdd(-1.5,vector,point);
assertTrue(newPoint.equals(new Point3f(2.5,-1.5,-0.5)));
newPoint.scaleAdd(0.1,vector,point);
assertTrue(newPoint.equals(new Point3f(0.9,0.1,1.1)));
}
@Test
public void scaleAddIntPoint3DVector3D() {
Point3f point = new Point3f(1.0,1.2,1.0);
Vector3f vector = new Vector3f(-1,0,1);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.scaleAdd(0,point,vector);
assertTrue(newPoint.equals(new Point3f(-1,0,1)));
newPoint.scaleAdd(1,point,vector);
assertTrue(newPoint.equals(new Point3f(0.0,1.2,2.0)));
newPoint.scaleAdd(-1,point,vector);
assertTrue(newPoint.equals(new Point3f(-2.0,-1.2,0.0)));
newPoint.scaleAdd(10,point,vector);
assertTrue(newPoint.equals(new Point3f(9,12,11)));
}
@Test
public void scaleAddDoublePoint3DVector3D() {
Point3f point = new Point3f(-1,1,1);
Vector3f vector = new Vector3f(1,0,1);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.scaleAdd(0.0,point,vector);
assertTrue(newPoint.equals(new Point3f(1,0,1)));
newPoint.scaleAdd(1.5,point,vector);
assertTrue(newPoint.equals(new Point3f(-0.5,1.5,2.5)));
newPoint.scaleAdd(-1.5,point,vector);
assertTrue(newPoint.equals(new Point3f(2.5,-1.5,-0.5)));
newPoint.scaleAdd(0.1,point,vector);
assertTrue(newPoint.equals(new Point3f(0.9,0.1,1.1)));
}
@Test
public void scaleAddIntVector3D() {
Vector3f vector = new Vector3f(1,0,1);
Point3f newPoint = new Point3f(0,0,0);
newPoint.scaleAdd(0,vector);
assertTrue(newPoint.equals(new Point3f(1,0,1)));
newPoint.scaleAdd(1,vector);
assertTrue(newPoint.equals(new Point3f(2,0,2)));
newPoint.scaleAdd(-10,vector);
assertTrue(newPoint.equals(new Point3f(-19,0,-19)));
}
@Test
public void scaleAddDoubleVector3D() {
Vector3f vector = new Vector3f(1,0,1);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.scaleAdd(0.5,vector);
assertTrue(newPoint.equals(new Point3f(1,0,1)));
newPoint.scaleAdd(1.2,vector);
assertTrue(newPoint.equals(new Point3f(2.2,0.0,2.2)));
newPoint.scaleAdd(-10,vector);
assertTrue(newPoint.equals(new Point3f(-21,0,-21)));
}
@Test
public void subPoint3DVector3D() {
Point3f point = new Point3f(0,0,0);
Point3f point2 = new Point3f(1,0,-1);
Vector3f vector = new Vector3f(-1.2,-1.2,-1.2);
Vector3f vector2 = new Vector3f(2.0,1.5,5.125);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
newPoint.sub(point,vector);
assertTrue(newPoint.equals(new Point3f(1.2,1.2,1.2)));
newPoint.sub(point2,vector2);
assertTrue(newPoint.equals(new Point3f(-1.0,-1.5,-6.125)));
}
@Test
public void subVector3D() {
Point3f point = new Point3f(0,0,0);
Point3f point2 = new Point3f(-1,0,1);
Vector3f vector = new Vector3f(-1.2,-1.2,-1.2);
Vector3f vector2 = new Vector3f(-2.0,-1.5,-5.125);
Point3f newPoint = new Point3f(0.0,0.0,0.0);
point.sub(vector);
assertTrue(point.equals(new Point3f(1.2,1.2,1.2)));
point2.sub(vector2);
assertTrue(point2.equals(new Point3f(1.0,1.5,6.125)));
}
@Test
public void isCollinearPointsDoubleDoubleDoubleDoubleDoubleDoubleDoubleDoubleDouble() {
Point3f point = new Point3f();
assertTrue(FunctionalPoint3D.isCollinearPoints(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
assertTrue(FunctionalPoint3D.isCollinearPoints(-6, -4, 2, -1, 3, -1, 4, 10, -4, 0));
assertTrue(FunctionalPoint3D.isCollinearPoints(-6, -4, 2, -1, 3, -1, 4, 10, -4.001, 0.01));
assertFalse(FunctionalPoint3D.isCollinearPoints(0, 0, 0, 1, 1, 1, 1, 1, -5, 0));
}
@Test
public void distancePointPoint() {
Point3f point = new Point3f();
assertEpsilonEquals(0,FunctionalPoint3D.distancePointPoint(0, 0, 0, 0, 0, 0));
assertEpsilonEquals(Math.sqrt(14),FunctionalPoint3D.distancePointPoint(0, 0, 0, 1, 2, 3));
assertEpsilonEquals(Math.sqrt(3),FunctionalPoint3D.distancePointPoint(0, 0, 0, 1, 1, 1));
}
@Test
public void distanceSquaredPointPoint() {
Point3f point = new Point3f();
assertEpsilonEquals(0,FunctionalPoint3D.distanceSquaredPointPoint(0, 0, 0, 0, 0, 0));
assertEpsilonEquals(14,FunctionalPoint3D.distanceSquaredPointPoint(0, 0, 0, 1, 2, 3));
assertEpsilonEquals(3,FunctionalPoint3D.distanceSquaredPointPoint(0, 0, 0, 1, 1, 1));
}
@Test
public void distanceL1PointPoint() {
Point3f point = new Point3f();
assertEpsilonEquals(6,FunctionalPoint3D.distanceL1PointPoint(1.0,2.0,3.0,0,0,0));
assertEpsilonEquals(0,FunctionalPoint3D.distanceL1PointPoint(1.0,2.0,3.0,1,2,3));
assertEpsilonEquals(0,FunctionalPoint3D.distanceL1PointPoint(1,2,3,1.0,2.0,3.0));
assertEpsilonEquals(6,FunctionalPoint3D.distanceL1PointPoint(1.0,2.0,3.0,-1,0,1));
}
@Test
public void distanceLinfPointPoint() {
Point3f point = new Point3f();
assertEpsilonEquals(3,FunctionalPoint3D.distanceLinfPointPoint(1.0,2.0,3.0,0,0,0));
assertEpsilonEquals(0,FunctionalPoint3D.distanceLinfPointPoint(1.0,2.0,3.0,1,2,3));
assertEpsilonEquals(0,FunctionalPoint3D.distanceLinfPointPoint(1,2,3,1.0,2.0,3.0));
assertEpsilonEquals(2,FunctionalPoint3D.distanceLinfPointPoint(1.0,2.0,3.0,-1,0,1));
}
}