/* * $Id$ * * Copyright (c) 2009-10, Multiagent Team, * Laboratoire Systemes et Transports, * Universite de Technologie de Belfort-Montbeliard. * All rights reserved. * * This software is the confidential and proprietary information * of the Laboratoire Systemes et Transports * of the Universite de Technologie de Belfort-Montbeliard ("Confidential Information"). * You shall not disclose such Confidential Information and shall use * it only in accordance with the terms of the license agreement * you entered into with the SeT. * * http://www.multiagent.fr/ */ package org.arakhne.afc.math.physics; import static org.arakhne.afc.math.MathConstants.DEMI_PI; import static org.arakhne.afc.math.MathConstants.ONE_HALF_PI; import static org.arakhne.afc.math.MathConstants.PI; import static org.arakhne.afc.math.MathConstants.QUARTER_PI; import static org.arakhne.afc.math.MathConstants.SQRT_2; import static org.arakhne.afc.math.MathConstants.THREE_QUARTER_PI; import static org.arakhne.afc.math.MathConstants.TWO_PI; import org.arakhne.afc.math.AbstractMathTestCase; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Test for {@link JavaPhysicsEngine} * * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ @SuppressWarnings("all") public class JavaPhysicsEngineTest extends AbstractMathTestCase { private JavaPhysicsEngine engine; /** * @throws Exception */ @Before public void setUp() throws Exception { this.engine = new JavaPhysicsEngine(); } /** * @throws Exception */ @After public void tearDown() throws Exception { this.engine = null; } private Vector2fx makeVect(double x, double y, double n) { Vector2fx v = new Vector2fx(x,y); if (v.getLengthSquared()!=0.) v.normalize(); v.scale(n); return v; } private Vector3f makeVect(double x, double y, double z, double n) { Vector3f v = new Vector3f(x,y,z); if (v.getLengthSquared()!=0.) v.normalize(); v.scale((double) n); return v; } /** */ @Test public void speed() { assertEpsilonEquals(0., this.engine.speed(0., 1.)); assertEpsilonEquals(PI, this.engine.speed(PI, 1.)); assertEpsilonEquals(-PI, this.engine.speed(-PI, 1.)); assertEpsilonEquals(0., this.engine.speed(0., .5)); assertEpsilonEquals(TWO_PI, this.engine.speed(PI, .5)); assertEpsilonEquals(-TWO_PI, this.engine.speed(-PI, .5)); } /** */ @Test public void acceleration() { assertEpsilonEquals(0., this.engine.acceleration(0., 0., 1.)); assertEpsilonEquals(PI, this.engine.acceleration(0., PI, 1.)); assertEpsilonEquals(-PI, this.engine.acceleration(0., -PI, 1.)); assertEpsilonEquals(-PI, this.engine.acceleration(PI, 0., 1.)); assertEpsilonEquals(0., this.engine.acceleration(PI, PI, 1.)); assertEpsilonEquals(-TWO_PI, this.engine.acceleration(PI, -PI, 1.)); assertEpsilonEquals(PI, this.engine.acceleration(-PI, 0., 1.)); assertEpsilonEquals(TWO_PI, this.engine.acceleration(-PI, PI, 1.)); assertEpsilonEquals(0., this.engine.acceleration(-PI, -PI, 1.)); assertEpsilonEquals(0., this.engine.acceleration(0., 0., .5)); assertEpsilonEquals(TWO_PI, this.engine.acceleration(0., PI, .5)); assertEpsilonEquals(-TWO_PI, this.engine.acceleration(0., -PI, .5)); assertEpsilonEquals(-TWO_PI, this.engine.acceleration(PI, 0., .5)); assertEpsilonEquals(0., this.engine.acceleration(PI, PI, .5)); assertEpsilonEquals(-2.*TWO_PI, this.engine.acceleration(PI, -PI, .5)); assertEpsilonEquals(TWO_PI, this.engine.acceleration(-PI, 0., .5)); assertEpsilonEquals(2*TWO_PI, this.engine.acceleration(-PI, PI, .5)); assertEpsilonEquals(0., this.engine.acceleration(-PI, -PI, .5)); } /** */ public void motionNewtonLaw() { assertEpsilonEquals(0., this.engine.motionNewtonLaw(0., 0., 1.)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonLaw(0., PI, 1.)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonLaw(0., -PI, 1.)); assertEpsilonEquals(PI, this.engine.motionNewtonLaw(PI, 0., 1.)); assertEpsilonEquals(ONE_HALF_PI, this.engine.motionNewtonLaw(PI, PI, 1.)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonLaw(PI, -PI, 1.)); assertEpsilonEquals(-PI, this.engine.motionNewtonLaw(-PI, 0., 1.)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonLaw(-PI, PI, 1.)); assertEpsilonEquals(-ONE_HALF_PI, this.engine.motionNewtonLaw(-PI, -PI, 1.)); assertEpsilonEquals(0., this.engine.motionNewtonLaw(0., 0., .5)); assertEpsilonEquals(QUARTER_PI/2., this.engine.motionNewtonLaw(0., PI, .5)); assertEpsilonEquals(-QUARTER_PI/2., this.engine.motionNewtonLaw(0., -PI, .5)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonLaw(PI, 0., .5)); assertEpsilonEquals(DEMI_PI+QUARTER_PI/2., this.engine.motionNewtonLaw(PI, PI, .5)); assertEpsilonEquals(THREE_QUARTER_PI/2., this.engine.motionNewtonLaw(PI, -PI, .5)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonLaw(-PI, 0., .5)); assertEpsilonEquals(-THREE_QUARTER_PI/2., this.engine.motionNewtonLaw(-PI, PI, .5)); assertEpsilonEquals((-PI-QUARTER_PI)/2., this.engine.motionNewtonLaw(-PI, -PI, .5)); } /** */ public void motionNewtonLaw1D() { assertEpsilonEquals(0., this.engine.motionNewtonLaw1D(0., 0, DEMI_PI, 0., -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(QUARTER_PI, this.engine.motionNewtonLaw1D(0., 0, DEMI_PI, PI, -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(-QUARTER_PI/2., this.engine.motionNewtonLaw1D(0., 0, DEMI_PI, -PI, -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonLaw1D(PI, 0, DEMI_PI, 0., -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonLaw1D(PI, 0, DEMI_PI, PI, -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonLaw1D(PI, 0, DEMI_PI, -PI, -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonLaw1D(-PI, 0, DEMI_PI, 0., -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonLaw1D(-PI, 0, DEMI_PI, PI, -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonLaw1D(-PI, 0, DEMI_PI, -PI, -QUARTER_PI, DEMI_PI, 1.)); assertEpsilonEquals(0., this.engine.motionNewtonLaw1D(0.,0, DEMI_PI, 0., -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(QUARTER_PI/4., this.engine.motionNewtonLaw1D(0., 0, DEMI_PI, PI, -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(-QUARTER_PI/8., this.engine.motionNewtonLaw1D(0., 0, DEMI_PI, -PI, -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(QUARTER_PI, this.engine.motionNewtonLaw1D(PI, 0, DEMI_PI, 0., -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(QUARTER_PI, this.engine.motionNewtonLaw1D(PI, 0, DEMI_PI, PI, -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(QUARTER_PI, this.engine.motionNewtonLaw1D(PI, 0, DEMI_PI, -PI, -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(-DEMI_PI/2., this.engine.motionNewtonLaw1D(-PI, 0, DEMI_PI, 0., -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(-DEMI_PI/2., this.engine.motionNewtonLaw1D(-PI, 0, DEMI_PI, PI, -QUARTER_PI, DEMI_PI, .5)); assertEpsilonEquals(-DEMI_PI/2., this.engine.motionNewtonLaw1D(-PI, 0, DEMI_PI, -PI, -QUARTER_PI, DEMI_PI, .5)); } /** */ public void motionNewtonLaw1D5() { Vector2fx v = new Vector2fx(); Vector2fx a = new Vector2fx(); //--- DT: 1 // velocity = (0,0) v.set(0.,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(0., 0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(QUARTER_PI,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx(-QUARTER_PI,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,PI); assertEpsilonEquals(new Vector2fx(0., QUARTER_PI), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,-PI); assertEpsilonEquals(new Vector2fx(0., -QUARTER_PI), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,PI); assertEpsilonEquals(makeVect(-1,1,QUARTER_PI), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,-PI); assertEpsilonEquals(makeVect(-1,-1,QUARTER_PI), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); // velocity = (PI/2,0) v.set(DEMI_PI,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI, 0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI-QUARTER_PI/2.,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,PI); assertEpsilonEquals(makeVect(1., .5, DEMI_PI), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,-PI); assertEpsilonEquals(makeVect(1., -.5, DEMI_PI), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); // velocity = (1,0) v.set(1.,0.); a.set(-1.,1.); assertEpsilonEquals(makeVect(1,1,Math.sqrt(.5)), this.engine.motionNewtonLaw1D5(v, 0, SQRT_2, a, -SQRT_2, SQRT_2, 1.)); a.set(-1.,-1.); assertEpsilonEquals(makeVect(1,-1,Math.sqrt(.5)), this.engine.motionNewtonLaw1D5(v, 0, SQRT_2, a, -SQRT_2, SQRT_2, 1.)); //--- DT: 1/2 // velocity = (0,0) v.set(0.,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(0., 0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(PI/16.,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx(-PI/16.,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(0.,PI); assertEpsilonEquals(new Vector2fx(0., PI/16.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(0.,-PI); assertEpsilonEquals(new Vector2fx(0., -PI/16.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,PI); assertEpsilonEquals(makeVect(-1,1,PI/16.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,-PI); assertEpsilonEquals(makeVect(-1,-1,PI/16.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); // velocity = (PI/2,0) v.set(DEMI_PI,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI/2., 0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI/2.,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx((DEMI_PI-PI/16.)/2.,0.), this.engine.motionNewtonLaw1D5(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); } /** */ public void motionNewtonLaw2D() { Vector2fx v = new Vector2fx(); Vector2fx a = new Vector2fx(); //--- DT: 1 // velocity = (0,0) v.set(0.,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(0., 0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(QUARTER_PI,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx(-QUARTER_PI,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,PI); assertEpsilonEquals(new Vector2fx(0., QUARTER_PI), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,-PI); assertEpsilonEquals(new Vector2fx(0., -QUARTER_PI), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,PI); assertEpsilonEquals(makeVect(-1,1,QUARTER_PI), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,-PI); assertEpsilonEquals(makeVect(-1,-1,QUARTER_PI), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); // velocity = (PI/2,0) v.set(DEMI_PI,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI, 0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI-QUARTER_PI/2.,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,PI); assertEpsilonEquals(makeVect(1., .5, DEMI_PI), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,-PI); assertEpsilonEquals(makeVect(1., -.5, DEMI_PI), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); // velocity = (1,0) v.set(1.,0.); a.set(-1.,1.); assertEpsilonEquals(makeVect(1,1,Math.sqrt(.5)), this.engine.motionNewtonLaw2D(v, 0, SQRT_2, a, -SQRT_2, SQRT_2, 1.)); a.set(-1.,-1.); assertEpsilonEquals(makeVect(1,-1,Math.sqrt(.5)), this.engine.motionNewtonLaw2D(v, 0, SQRT_2, a, -SQRT_2, SQRT_2, 1.)); //--- DT: 1/2 // velocity = (0,0) v.set(0.,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(0., 0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(PI/16.,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx(-PI/16.,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(0.,PI); assertEpsilonEquals(new Vector2fx(0., PI/16.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(0.,-PI); assertEpsilonEquals(new Vector2fx(0., -PI/16.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,PI); assertEpsilonEquals(makeVect(-1,1,PI/16.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,-PI); assertEpsilonEquals(makeVect(-1,-1,PI/16.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); // velocity = (PI/2,0) v.set(DEMI_PI,0.); a.set(0.,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI/2., 0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(PI,0.); assertEpsilonEquals(new Vector2fx(DEMI_PI/2.,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,0.); assertEpsilonEquals(new Vector2fx((DEMI_PI-PI/16.)/2.,0.), this.engine.motionNewtonLaw2D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); } /** */ public void motionNewtonLaw3D() { Vector3f v = new Vector3f(); Vector3f a = new Vector3f(); //--- DT: 1 // velocity = (0,0) v.set(0.,0.,0.); a.set(0.,0.,0.); assertEpsilonEquals(new Vector3f(0., 0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(PI,0.,0.); assertEpsilonEquals(new Vector3f(QUARTER_PI,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,0.,0.); assertEpsilonEquals(new Vector3f(-QUARTER_PI,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,PI,0.); assertEpsilonEquals(new Vector3f(0., QUARTER_PI,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,-PI,0.); assertEpsilonEquals(new Vector3f(0., -QUARTER_PI,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,PI,0.); assertEpsilonEquals(makeVect(-1,1,0.,QUARTER_PI), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,-PI,0.); assertEpsilonEquals(makeVect(-1,-1,0.,QUARTER_PI), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); // velocity = (PI/2,0) v.set(DEMI_PI,0.,0.); a.set(0.,0.,0.); assertEpsilonEquals(new Vector3f(DEMI_PI, 0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(PI,0.,0.); assertEpsilonEquals(new Vector3f(DEMI_PI,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(-PI,0.,0.); assertEpsilonEquals(new Vector3f(DEMI_PI-QUARTER_PI/2.,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,PI,0.); assertEpsilonEquals(makeVect(1., .5,0., DEMI_PI), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); a.set(0.,-PI,0.); assertEpsilonEquals(makeVect(1., -.5,0, DEMI_PI), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, 1.)); // velocity = (1,0) v.set(1.,0.,0.); a.set(-1.,1.,0.); assertEpsilonEquals(makeVect(1,1,0.,Math.sqrt(.5)), this.engine.motionNewtonLaw3D(v, 0, SQRT_2, a, -SQRT_2, SQRT_2, 1.)); a.set(-1.,-1.,0.); assertEpsilonEquals(makeVect(1,-1,0.,Math.sqrt(.5)), this.engine.motionNewtonLaw3D(v, 0, SQRT_2, a, -SQRT_2, SQRT_2, 1.)); //--- DT: 1/2 // velocity = (0,0) v.set(0.,0.,0.); a.set(0.,0.,0.); assertEpsilonEquals(new Vector3f(0., 0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(PI,0.,0.); assertEpsilonEquals(new Vector3f(PI/16.,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,0.,0.); assertEpsilonEquals(new Vector3f(-PI/16.,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(0.,PI,0.); assertEpsilonEquals(new Vector3f(0., PI/16.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(0.,-PI,0.); assertEpsilonEquals(new Vector3f(0., -PI/16.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,PI,0.); assertEpsilonEquals(makeVect(-1,1,0.,PI/16.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,-PI,0.); assertEpsilonEquals(makeVect(-1,-1,0.,PI/16.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); // velocity = (PI/2,0) v.set(DEMI_PI,0.,0.); a.set(0.,0.,0.); assertEpsilonEquals(new Vector3f(DEMI_PI/2., 0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(PI,0.,0.); assertEpsilonEquals(new Vector3f(DEMI_PI/2.,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); a.set(-PI,0.,0.); assertEpsilonEquals(new Vector3f((DEMI_PI-PI/16.)/2.,0.,0.), this.engine.motionNewtonLaw3D(v, 0, DEMI_PI, a, -QUARTER_PI, DEMI_PI, .5)); } /** */ public void motionNewtonEuler1Law() { assertEpsilonEquals(0., this.engine.motionNewtonEuler1Law(0., 1.)); assertEpsilonEquals(PI, this.engine.motionNewtonEuler1Law(PI, 1.)); assertEpsilonEquals(-PI, this.engine.motionNewtonEuler1Law(-PI, 1.)); assertEpsilonEquals(0., this.engine.motionNewtonEuler1Law(0., .5)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonEuler1Law(PI, .5)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonEuler1Law(-PI, .5)); } /** */ public void motionNewtonEuler1Law1D() { assertEpsilonEquals(0., this.engine.motionNewtonEuler1Law1D(0., 0, DEMI_PI, 1.)); assertEpsilonEquals(DEMI_PI, this.engine.motionNewtonEuler1Law1D(PI, 0, DEMI_PI, 1.)); assertEpsilonEquals(-DEMI_PI, this.engine.motionNewtonEuler1Law1D(-PI, 0, DEMI_PI, 1.)); assertEpsilonEquals(0., this.engine.motionNewtonEuler1Law1D(0., 0, DEMI_PI, .5)); assertEpsilonEquals(QUARTER_PI, this.engine.motionNewtonEuler1Law1D(PI, 0, DEMI_PI, .5)); assertEpsilonEquals(-QUARTER_PI, this.engine.motionNewtonEuler1Law1D(-PI, 0, DEMI_PI, .5)); } /** */ public void motionNewtonEuler1Law1D5() { Vector2fx v = new Vector2fx(); v.set(0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(0.,PI); assertEpsilonEquals(makeVect(0.,1.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(0.,-PI); assertEpsilonEquals(makeVect(0.,-1.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(PI,0.); assertEpsilonEquals(makeVect(1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(PI,PI); assertEpsilonEquals(makeVect(1.,1.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(PI,-PI); assertEpsilonEquals(makeVect(1.,-1.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(-PI,0.); assertEpsilonEquals(makeVect(-1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(-PI,PI); assertEpsilonEquals(makeVect(-1.,1.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(-PI,-PI); assertEpsilonEquals(makeVect(-1.,-1.,DEMI_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, 1.)); v.set(0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(0.,PI); assertEpsilonEquals(makeVect(0.,1.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(0.,-PI); assertEpsilonEquals(makeVect(0.,-1.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(PI,0.); assertEpsilonEquals(makeVect(1.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(PI,PI); assertEpsilonEquals(makeVect(1.,1.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(PI,-PI); assertEpsilonEquals(makeVect(1.,-1.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(-PI,0.); assertEpsilonEquals(makeVect(-1.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(-PI,PI); assertEpsilonEquals(makeVect(-1.,1.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); v.set(-PI,-PI); assertEpsilonEquals(makeVect(-1.,-1.,QUARTER_PI), this.engine.motionNewtonEuler1Law1D5(v, 0, DEMI_PI, .5)); } /** */ public void motionNewtonEuler1Law2D() { Vector2fx v = new Vector2fx(); v.set(0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(0.,PI); assertEpsilonEquals(makeVect(0.,1.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(0.,-PI); assertEpsilonEquals(makeVect(0.,-1.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(PI,0.); assertEpsilonEquals(makeVect(1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(PI,PI); assertEpsilonEquals(makeVect(1.,1.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(PI,-PI); assertEpsilonEquals(makeVect(1.,-1.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(-PI,0.); assertEpsilonEquals(makeVect(-1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(-PI,PI); assertEpsilonEquals(makeVect(-1.,1.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(-PI,-PI); assertEpsilonEquals(makeVect(-1.,-1.,DEMI_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, 1.)); v.set(0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(0.,PI); assertEpsilonEquals(makeVect(0.,1.,QUARTER_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(0.,-PI); assertEpsilonEquals(makeVect(0.,-1.,QUARTER_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(PI,0.); assertEpsilonEquals(makeVect(1.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(PI,PI); assertEpsilonEquals(makeVect(1.,1.,QUARTER_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(PI,-PI); assertEpsilonEquals(makeVect(1.,-1.,QUARTER_PI), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(-PI,0.); assertEpsilonEquals(makeVect(-1.,0.,DEMI_PI/2.), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(-PI,PI); assertEpsilonEquals(makeVect(-1.,1.,DEMI_PI/2.), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); v.set(-PI,-PI); assertEpsilonEquals(makeVect(-1.,-1.,DEMI_PI/2.), this.engine.motionNewtonEuler1Law2D(v, 0, DEMI_PI, .5)); } /** */ public void motionNewtonEuler1Law3D() { Vector3f v = new Vector3f(); v.set(0.,0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.,0.), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(0.,PI,0.); assertEpsilonEquals(makeVect(0.,1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(0.,-PI,0.); assertEpsilonEquals(makeVect(0.,-1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(PI,0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(PI,PI,0.); assertEpsilonEquals(makeVect(1.,1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(PI,-PI,0.); assertEpsilonEquals(makeVect(1.,-1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(-PI,0.,0.); assertEpsilonEquals(makeVect(-1.,0.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(-PI,PI,0.); assertEpsilonEquals(makeVect(-1.,1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(-PI,-PI,0.); assertEpsilonEquals(makeVect(-1.,-1.,0.,DEMI_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, 1.)); v.set(0.,0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.,0.), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(0.,PI,0.); assertEpsilonEquals(makeVect(0.,1.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(0.,-PI,0.); assertEpsilonEquals(makeVect(0.,-1.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(PI,0.,0.); assertEpsilonEquals(makeVect(1.,0.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(PI,PI,0.); assertEpsilonEquals(makeVect(1.,1.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(PI,-PI,0.); assertEpsilonEquals(makeVect(1.,-1.,0.,QUARTER_PI), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(-PI,0.,0.); assertEpsilonEquals(makeVect(-1.,0.,0.,DEMI_PI/2.), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(-PI,PI,0.); assertEpsilonEquals(makeVect(-1.,1.,0.,DEMI_PI/2.), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); v.set(-PI,-PI,0.); assertEpsilonEquals(makeVect(-1.,-1.,0.,DEMI_PI/2.), this.engine.motionNewtonEuler1Law3D(v, 0, DEMI_PI, .5)); } }