List of usage examples for org.apache.commons.math3.geometry.euclidean.threed FieldVector3D distance
public static <T extends RealFieldElement<T>> T distance(final Vector3D v1, final FieldVector3D<T> v2)
From source file:org.orekit.utils.FieldAngularCoordinatesTest.java
@Test public void testToAC() { Random random = new Random(0xc9b4cf6c371108e0l); for (int i = 0; i < 100; ++i) { FieldRotation<DerivativeStructure> r = randomRotation(random); FieldVector3D<DerivativeStructure> o = randomVector(random, 1.0e-3); FieldVector3D<DerivativeStructure> a = randomVector(random, 1.0e-3); FieldAngularCoordinates<DerivativeStructure> acds = new FieldAngularCoordinates<DerivativeStructure>(r, o, a);/*from ww w. ja v a2 s.c o m*/ AngularCoordinates ac = acds.toAngularCoordinates(); Assert.assertEquals(0, Rotation.distance(r.toRotation(), ac.getRotation()), 1.0e-15); Assert.assertEquals(0, FieldVector3D.distance(o, ac.getRotationRate()).getReal(), 1.0e-15); } }
From source file:org.orekit.utils.FieldAngularCoordinatesTest.java
@Test public void testRoundTripNoOp() { Random random = new Random(0x1e610cfe89306669l); for (int i = 0; i < 100; ++i) { FieldRotation<DerivativeStructure> r1 = randomRotation(random); FieldVector3D<DerivativeStructure> o1 = randomVector(random, 1.0e-2); FieldVector3D<DerivativeStructure> a1 = randomVector(random, 1.0e-2); FieldAngularCoordinates<DerivativeStructure> ac1 = new FieldAngularCoordinates<DerivativeStructure>(r1, o1, a1);/*from ww w . j a v a 2s .co m*/ FieldRotation<DerivativeStructure> r2 = randomRotation(random); FieldVector3D<DerivativeStructure> o2 = randomVector(random, 1.0e-2); FieldVector3D<DerivativeStructure> a2 = randomVector(random, 1.0e-2); FieldAngularCoordinates<DerivativeStructure> ac2 = new FieldAngularCoordinates<DerivativeStructure>(r2, o2, a2); FieldAngularCoordinates<DerivativeStructure> roundTripSA = ac1.subtractOffset(ac2).addOffset(ac2); Assert.assertEquals(0.0, FieldRotation.distance(ac1.getRotation(), roundTripSA.getRotation()).getReal(), 1.0e-15); Assert.assertEquals(0.0, FieldVector3D.distance(ac1.getRotationRate(), roundTripSA.getRotationRate()).getReal(), 2.0e-17); Assert.assertEquals(0.0, FieldVector3D .distance(ac1.getRotationAcceleration(), roundTripSA.getRotationAcceleration()).getReal(), 2.0e-17); FieldAngularCoordinates<DerivativeStructure> roundTripAS = ac1.addOffset(ac2).subtractOffset(ac2); Assert.assertEquals(0.0, FieldRotation.distance(ac1.getRotation(), roundTripAS.getRotation()).getReal(), 1.0e-15); Assert.assertEquals(0.0, FieldVector3D.distance(ac1.getRotationRate(), roundTripAS.getRotationRate()).getReal(), 2.0e-17); Assert.assertEquals(0.0, FieldVector3D .distance(ac1.getRotationAcceleration(), roundTripAS.getRotationAcceleration()).getReal(), 2.0e-17); } }
From source file:org.orekit.utils.FieldAngularCoordinatesTest.java
@Test @Deprecated // to be removed when AngularCoordinates.interpolate is removed public void testInterpolationSimple() throws OrekitException { AbsoluteDate date = AbsoluteDate.GALILEO_EPOCH; double alpha0 = 0.5 * FastMath.PI; double omega = 0.5 * FastMath.PI; FieldAngularCoordinates<DerivativeStructure> reference = new FieldAngularCoordinates<DerivativeStructure>( createRotation(createVector(0, 0, 1, 4), alpha0), new FieldVector3D<DerivativeStructure>(omega, createVector(0, 0, -1, 4)), createVector(0, 0, 0, 4)); List<Pair<AbsoluteDate, FieldAngularCoordinates<DerivativeStructure>>> sample = new ArrayList<Pair<AbsoluteDate, FieldAngularCoordinates<DerivativeStructure>>>(); for (double dt : new double[] { 0.0, 0.5, 1.0 }) { sample.add(new Pair<AbsoluteDate, FieldAngularCoordinates<DerivativeStructure>>(date.shiftedBy(dt), reference.shiftedBy(dt))); }// w w w . jav a 2s . co m for (double dt = 0; dt < 1.0; dt += 0.001) { FieldAngularCoordinates<DerivativeStructure> interpolated = FieldAngularCoordinates .interpolate(date.shiftedBy(dt), true, sample); FieldRotation<DerivativeStructure> r = interpolated.getRotation(); FieldVector3D<DerivativeStructure> rate = interpolated.getRotationRate(); FieldVector3D<DerivativeStructure> acceleration = interpolated.getRotationAcceleration(); Assert.assertEquals(0.0, FieldRotation .distance(createRotation(createVector(0, 0, 1, 4), alpha0 + omega * dt), r).getReal(), 1.1e-15); Assert.assertEquals(0.0, FieldVector3D.distance(createVector(0, 0, -omega, 4), rate).getReal(), 4.0e-15); Assert.assertEquals(0.0, FieldVector3D.distance(createVector(0, 0, 0, 4), acceleration).getReal(), 3.2e-14); } }
From source file:org.orekit.utils.FieldPVCoordinatesTest.java
@Test public void testGetters() { FieldVector3D<DerivativeStructure> p = createVector(1, 0.1, 10, 6); FieldVector3D<DerivativeStructure> v = createVector(-0.1, 1, 0, 6); FieldPVCoordinates<DerivativeStructure> pv = new FieldPVCoordinates<DerivativeStructure>(p, v); Assert.assertEquals(0, FieldVector3D.distance(p, pv.getPosition()).getValue(), 1.0e-15); Assert.assertEquals(0, FieldVector3D.distance(v, pv.getVelocity()).getValue(), 1.0e-15); Assert.assertEquals(0, FieldVector3D.distance(createVector(-10, -1, 1.01, 6), pv.getMomentum()).getValue(), 1.0e-15);// w ww . j av a 2 s. c o m FieldPVCoordinates<DerivativeStructure> pvn = pv.negate(); Assert.assertEquals(0, FieldVector3D.distance(createVector(-1, -0.1, -10, 6), pvn.getPosition()).getValue(), 1.0e-15); Assert.assertEquals(0, FieldVector3D.distance(createVector(0.1, -1, 0, 6), pvn.getVelocity()).getValue(), 1.0e-15); Assert.assertEquals(0, FieldVector3D.distance(createVector(-10, -1, 1.01, 6), pvn.getMomentum()).getValue(), 1.0e-15); }
From source file:org.orekit.utils.TimeStampedFieldAngularCoordinatesTest.java
@Test public void testToAC() { Random random = new Random(0xc9b4cf6c371108e0l); for (int i = 0; i < 100; ++i) { FieldRotation<DerivativeStructure> r = randomRotation(random); FieldVector3D<DerivativeStructure> o = randomVector(random, 1.0e-3); FieldVector3D<DerivativeStructure> a = randomVector(random, 1.0e-3); TimeStampedFieldAngularCoordinates<DerivativeStructure> acds = new TimeStampedFieldAngularCoordinates<DerivativeStructure>( AbsoluteDate.J2000_EPOCH, r, o, a); AngularCoordinates ac = acds.toAngularCoordinates(); Assert.assertEquals(0, Rotation.distance(r.toRotation(), ac.getRotation()), 1.0e-15); Assert.assertEquals(0, FieldVector3D.distance(o, ac.getRotationRate()).getReal(), 1.0e-15); Assert.assertEquals(0, FieldVector3D.distance(a, ac.getRotationAcceleration()).getReal(), 1.0e-15); }/*from www .j a v a2s. co m*/ }
From source file:org.orekit.utils.TimeStampedFieldAngularCoordinatesTest.java
@Test public void testRoundTripNoOp() { Random random = new Random(0x1e610cfe89306669l); for (int i = 0; i < 100; ++i) { FieldRotation<DerivativeStructure> r1 = randomRotation(random); FieldVector3D<DerivativeStructure> o1 = randomVector(random, 1.0e-2); FieldVector3D<DerivativeStructure> a1 = randomVector(random, 1.0e-2); TimeStampedFieldAngularCoordinates<DerivativeStructure> ac1 = new TimeStampedFieldAngularCoordinates<DerivativeStructure>( AbsoluteDate.J2000_EPOCH, r1, o1, a1); FieldRotation<DerivativeStructure> r2 = randomRotation(random); FieldVector3D<DerivativeStructure> o2 = randomVector(random, 1.0e-2); FieldVector3D<DerivativeStructure> a2 = randomVector(random, 1.0e-2); TimeStampedFieldAngularCoordinates<DerivativeStructure> ac2 = new TimeStampedFieldAngularCoordinates<DerivativeStructure>( AbsoluteDate.J2000_EPOCH, r2, o2, a2); TimeStampedFieldAngularCoordinates<DerivativeStructure> roundTripSA = ac1.subtractOffset(ac2) .addOffset(ac2);/*from w w w.j a v a 2 s.co m*/ Assert.assertEquals(0.0, FieldRotation.distance(ac1.getRotation(), roundTripSA.getRotation()).getReal(), 4.0e-16); Assert.assertEquals(0.0, FieldVector3D.distance(ac1.getRotationRate(), roundTripSA.getRotationRate()).getReal(), 2.0e-17); Assert.assertEquals(0.0, FieldVector3D .distance(ac1.getRotationAcceleration(), roundTripSA.getRotationAcceleration()).getReal(), 1.0e-17); TimeStampedFieldAngularCoordinates<DerivativeStructure> roundTripAS = ac1.addOffset(ac2) .subtractOffset(ac2); Assert.assertEquals(0.0, FieldRotation.distance(ac1.getRotation(), roundTripAS.getRotation()).getReal(), 6.0e-16); Assert.assertEquals(0.0, FieldVector3D.distance(ac1.getRotationRate(), roundTripAS.getRotationRate()).getReal(), 2.0e-17); Assert.assertEquals(0.0, FieldVector3D .distance(ac1.getRotationAcceleration(), roundTripAS.getRotationAcceleration()).getReal(), 2.0e-17); } }
From source file:org.orekit.utils.TimeStampedFieldAngularCoordinatesTest.java
@Test public void testRodriguesSymmetry() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { // use reflection to test the private static methods Method getter = TimeStampedFieldAngularCoordinates.class.getDeclaredMethod("getModifiedRodrigues", new Class<?>[] { TimeStampedFieldAngularCoordinates.class, double[].class, double.class }); getter.setAccessible(true);//from ww w . ja v a2s .c o m Method factory = TimeStampedFieldAngularCoordinates.class.getDeclaredMethod("createFromModifiedRodrigues", new Class<?>[] { RealFieldElement[][].class, TimeStampedFieldAngularCoordinates.class }); factory.setAccessible(true); // check the two-way conversion result in identity Random random = new Random(0xb1e615aaa8236b52l); double[] previous = new double[] { 1.0, 0.0, 0.0, 0.0 }; for (int i = 0; i < 1000; ++i) { FieldRotation<DerivativeStructure> offsetRotation = randomRotation(random); FieldVector3D<DerivativeStructure> offsetRate = randomVector(random, 0.01); TimeStampedFieldAngularCoordinates<DerivativeStructure> offset = new TimeStampedFieldAngularCoordinates<DerivativeStructure>( AbsoluteDate.J2000_EPOCH, offsetRotation, offsetRate, createVector(0, 0, 0, 4)); FieldRotation<DerivativeStructure> rotation = randomRotation(random); FieldVector3D<DerivativeStructure> rotationRate = randomVector(random, 0.01); FieldVector3D<DerivativeStructure> rotationAcceleration = randomVector(random, 0.01); TimeStampedFieldAngularCoordinates<DerivativeStructure> ac = new TimeStampedFieldAngularCoordinates<DerivativeStructure>( AbsoluteDate.J2000_EPOCH, rotation, rotationRate, rotationAcceleration); double dt = 10.0 * random.nextDouble(); DerivativeStructure[][] rodrigues = (DerivativeStructure[][]) getter.invoke(null, ac.subtractOffset(offset.shiftedBy(dt)), previous, -0.9999); @SuppressWarnings("unchecked") TimeStampedFieldAngularCoordinates<DerivativeStructure> rebuilt = (TimeStampedFieldAngularCoordinates<DerivativeStructure>) factory .invoke(null, rodrigues, offset.shiftedBy(dt)); Assert.assertEquals(0.0, FieldRotation.distance(rotation, rebuilt.getRotation()).getReal(), 1.0e-14); Assert.assertEquals(0.0, FieldVector3D.distance(rotationRate, rebuilt.getRotationRate()).getReal(), 1.0e-15); Assert.assertEquals(0.0, FieldVector3D.distance(rotationAcceleration, rebuilt.getRotationAcceleration()).getReal(), 1.0e-15); } }
From source file:org.orekit.utils.TimeStampedFieldAngularCoordinatesTest.java
@Test public void testInterpolationNeedOffsetWrongRate() throws OrekitException { AbsoluteDate date = AbsoluteDate.GALILEO_EPOCH; double omega = 2.0 * FastMath.PI; TimeStampedFieldAngularCoordinates<DerivativeStructure> reference = new TimeStampedFieldAngularCoordinates<DerivativeStructure>( date, createRotation(1, 0, 0, 0, false), createVector(0, 0, -omega, 4), createVector(0, 0, 0, 4)); List<TimeStampedFieldAngularCoordinates<DerivativeStructure>> sample = new ArrayList<TimeStampedFieldAngularCoordinates<DerivativeStructure>>(); for (double dt : new double[] { 0.0, 0.25, 0.5, 0.75, 1.0 }) { TimeStampedFieldAngularCoordinates<DerivativeStructure> shifted = reference.shiftedBy(dt); sample.add(new TimeStampedFieldAngularCoordinates<DerivativeStructure>(shifted.getDate(), shifted.getRotation(), createVector(0, 0, 0, 4), createVector(0, 0, 0, 4))); }/*from w w w. j a v a 2s . c o m*/ for (TimeStampedFieldAngularCoordinates<DerivativeStructure> s : sample) { TimeStampedFieldAngularCoordinates<DerivativeStructure> interpolated = TimeStampedFieldAngularCoordinates .interpolate(s.getDate(), AngularDerivativesFilter.USE_RR, sample); FieldRotation<DerivativeStructure> r = interpolated.getRotation(); FieldVector3D<DerivativeStructure> rate = interpolated.getRotationRate(); Assert.assertEquals(0.0, FieldRotation.distance(s.getRotation(), r).getReal(), 2.0e-14); Assert.assertEquals(0.0, FieldVector3D.distance(s.getRotationRate(), rate).getReal(), 2.0e-13); } }
From source file:org.orekit.utils.TimeStampedFieldAngularCoordinatesTest.java
@Test public void testInterpolationRotationOnly() throws OrekitException { AbsoluteDate date = AbsoluteDate.GALILEO_EPOCH; double alpha0 = 0.5 * FastMath.PI; double omega = 0.5 * FastMath.PI; TimeStampedFieldAngularCoordinates<DerivativeStructure> reference = new TimeStampedFieldAngularCoordinates<DerivativeStructure>( date, createRotation(createVector(0, 0, 1, 4), alpha0), new FieldVector3D<DerivativeStructure>(omega, createVector(0, 0, -1, 4)), createVector(0, 0, 0, 4)); List<TimeStampedFieldAngularCoordinates<DerivativeStructure>> sample = new ArrayList<TimeStampedFieldAngularCoordinates<DerivativeStructure>>(); for (double dt : new double[] { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 }) { FieldRotation<DerivativeStructure> r = reference.shiftedBy(dt).getRotation(); sample.add(new TimeStampedFieldAngularCoordinates<DerivativeStructure>(date.shiftedBy(dt), r, createVector(0, 0, 0, 4), createVector(0, 0, 0, 4))); }/*w ww. j a v a2 s . c o m*/ for (double dt = 0; dt < 1.0; dt += 0.001) { TimeStampedFieldAngularCoordinates<DerivativeStructure> interpolated = TimeStampedFieldAngularCoordinates .interpolate(date.shiftedBy(dt), AngularDerivativesFilter.USE_R, sample); FieldRotation<DerivativeStructure> r = interpolated.getRotation(); FieldVector3D<DerivativeStructure> rate = interpolated.getRotationRate(); FieldVector3D<DerivativeStructure> acceleration = interpolated.getRotationAcceleration(); Assert.assertEquals(0.0, FieldRotation.distance(reference.shiftedBy(dt).getRotation(), r).getReal(), 3.0e-4); Assert.assertEquals(0.0, FieldVector3D.distance(reference.shiftedBy(dt).getRotationRate(), rate).getReal(), 1.0e-2); Assert.assertEquals(0.0, FieldVector3D .distance(reference.shiftedBy(dt).getRotationAcceleration(), acceleration).getReal(), 1.0e-2); } }
From source file:org.orekit.utils.TimeStampedFieldAngularCoordinatesTest.java
@Test public void testInterpolationGTODIssue() throws OrekitException { AbsoluteDate t0 = new AbsoluteDate("2004-04-06T19:59:28.000", TimeScalesFactory.getTAI()); double[][] params = new double[][] { { 0.0, -0.3802356750911964, -0.9248896320037013, 7.292115030462892e-5 }, { 4.0, 0.1345716955788532, -0.990903859488413, 7.292115033301528e-5 }, { 8.0, -0.613127541102373, 0.7899839354960061, 7.292115037371062e-5 } }; List<TimeStampedFieldAngularCoordinates<DerivativeStructure>> sample = new ArrayList<TimeStampedFieldAngularCoordinates<DerivativeStructure>>(); for (double[] row : params) { AbsoluteDate t = t0.shiftedBy(row[0] * 3600.0); FieldRotation<DerivativeStructure> r = createRotation(row[1], 0.0, 0.0, row[2], false); FieldVector3D<DerivativeStructure> o = new FieldVector3D<DerivativeStructure>(row[3], createVector(0, 0, 1, 4)); sample.add(// ww w.j av a 2s. co m new TimeStampedFieldAngularCoordinates<DerivativeStructure>(t, r, o, createVector(0, 0, 0, 4))); } for (double dt = 0; dt < 29000; dt += 120) { TimeStampedFieldAngularCoordinates<DerivativeStructure> shifted = sample.get(0).shiftedBy(dt); TimeStampedFieldAngularCoordinates<DerivativeStructure> interpolated = TimeStampedFieldAngularCoordinates .interpolate(t0.shiftedBy(dt), AngularDerivativesFilter.USE_RR, sample); Assert.assertEquals(0.0, FieldRotation.distance(shifted.getRotation(), interpolated.getRotation()).getReal(), 1.3e-7); Assert.assertEquals(0.0, FieldVector3D.distance(shifted.getRotationRate(), interpolated.getRotationRate()).getReal(), 1.0e-11); } }