List of usage examples for org.apache.commons.math3.geometry.euclidean.threed Vector3D distance
public double distance(Vector<Euclidean3D> v)
From source file:edu.mit.fss.examples.member.OrekitSurfaceElement.java
/** * Gets the slant range (in meters) from this element * to the specified element./*from w w w. ja v a 2 s.c o m*/ * * @param element the element * @return the slant range to */ public double getSlantRange(Element element) { if (element.getFrame() == ReferenceFrame.UNKNOWN) { logger.warn("Unknown reference frame for element " + element + ", cannot compute elevation."); return 0; } try { // use Orekit library to convert between reference frames Vector3D thisPosition = new Vector3D(0, 0, 0); Vector3D thatPosition = element.getFrame().getOrekitFrame().getTransformTo(topoFrame, getDate()) .transformPosition(element.getPosition()); // compute vector distance return thisPosition.distance(thatPosition); } catch (OrekitException e) { logger.error(e.getMessage()); } return 0; }
From source file:edu.mit.fss.examples.member.OrekitOrbitalElement.java
/** * Gets the slant range (in meters) from this element * to the specified element./*from ww w. j a v a 2s. c o m*/ * * @param element the element * @return the slant range */ public double getSlantRange(Element element) { if (element.getFrame() == ReferenceFrame.UNKNOWN) { logger.warn("Unknown reference frame for element " + element + ", cannot compute slant range."); return 0; } try { // use Orekit library to convert between reference frames Vector3D thisPosition = getPosition(); Vector3D thatPosition = element.getFrame().getOrekitFrame() .getTransformTo(state.getFrame(), state.getDate()).transformPosition(element.getPosition()); // compute vector distance return thisPosition.distance(thatPosition); } catch (OrekitException e) { logger.error(e.getMessage()); } return 0; }
From source file:gin.melec.Cube.java
/** * Give the next plane, by checking first if the segment created by the two * vertices cross the current plane.//from ww w .j av a 2 s.com * @param v1, the first vertex. * @param v2, the second vertex. * @param plane, the plane that might be intersected. * @param currentSplit, the current split used. * @return the next split of the border. */ private AbstractSplit getNextSplit(final Vertex v1, final Vertex v2, CustomPlane plane, AbstractSplit currentSplit) { Vector3D vect1 = new Vector3D(v1.getX(), v1.getY(), v1.getZ()); Vector3D vect2 = new Vector3D(v2.getX(), v2.getY(), v2.getZ()); Line line = new Line(vect1, vect2, 0.001); Vector3D intersection = plane.intersection(line); AbstractSplit result = null; if (intersection != null && vect1.distance(vect2) > vect1.distance(intersection)) { if (plane.getSplit1() == currentSplit) { result = plane.getSplit2(); } else if (plane.getSplit2() == currentSplit) { result = plane.getSplit1(); } } return result; }
From source file:org.jtrfp.trcl.flow.Mission.java
public TunnelEntranceObject getNearestTunnelEntrance(double xInLegacyUnits, double yInLegacyUnits, double zInLegacyUnits) { TunnelEntranceObject result = null;//from w ww. ja va 2 s.c om double closestDistance = Double.POSITIVE_INFINITY; final Vector3D entPos = new Vector3D(TR.legacy2Modern(zInLegacyUnits), //Intentionally backwards TR.legacy2Modern(yInLegacyUnits), TR.legacy2Modern(xInLegacyUnits)); System.out.println("Requested entry pos=" + entPos); for (TunnelEntranceObject teo : tunnelMap.values()) { final Vector3D pos = new Vector3D(teo.getPosition()); System.out.println("Found tunnel at " + pos); final double distance = pos.distance(entPos); if (distance < closestDistance) { closestDistance = distance; result = teo; } } // end for(tunnels) return result; }
From source file:org.jtrfp.trcl.LineSegment.java
public static Triangle[] buildTriPipe(Vector3D start, Vector3D end, TextureDescription texture, int thickness, Triangle[] dest, int destOffset) { Rotation rot = new Rotation(Vector3D.PLUS_K, end.subtract(start).normalize()); final double len = start.distance(end); // Start// ww w . jav a 2 s . c o m Vector3D sbl = new Vector3D(-thickness, -thickness, 0);// bottom left Vector3D sbr = new Vector3D(thickness, -thickness, 0);// bottom right Vector3D stp = new Vector3D(0, thickness, 0); // End Vector3D ebl = new Vector3D(-thickness, -thickness, len); Vector3D ebr = new Vector3D(thickness, -thickness, len); Vector3D etp = new Vector3D(0, thickness, len); Vector3D cl = new Vector3D(-1, 1, 0).normalize(); Vector3D cr = new Vector3D(1, 1, 0).normalize(); Vector3D cb = new Vector3D(0, -1, 0); cl = rot.applyTo(cl); cr = rot.applyTo(cr); cb = rot.applyTo(cb); sbl = rot.applyTo(sbl).add(start); sbr = rot.applyTo(sbr).add(start); stp = rot.applyTo(stp).add(start); ebl = rot.applyTo(ebl).add(start); ebr = rot.applyTo(ebr).add(start); etp = rot.applyTo(etp).add(start); final double u[] = { 0, 1, 1, 0 }; final double v[] = { 1, 1, 0, 0 }; // TOP LEFT Triangle.quad2Triangles(new double[] { sbl.getX(), stp.getX(), etp.getX(), ebl.getX() }, new double[] { sbl.getY(), stp.getY(), etp.getY(), ebl.getY() }, new double[] { sbl.getZ(), stp.getZ(), etp.getZ(), ebl.getZ() }, u, v, texture, RenderMode.STATIC, false, cl, dest, destOffset, "LineSegment.topLeft"); // TOP RIGHT Triangle.quad2Triangles(new double[] { sbr.getX(), stp.getX(), etp.getX(), ebr.getX() }, new double[] { sbr.getY(), stp.getY(), etp.getY(), ebr.getY() }, new double[] { sbr.getZ(), stp.getZ(), etp.getZ(), ebr.getZ() }, u, v, texture, RenderMode.STATIC, false, cr, dest, destOffset + 2, "LineSegment.topRight"); // BOTTOM Triangle.quad2Triangles(new double[] { sbl.getX(), sbr.getX(), ebr.getX(), ebl.getX() }, new double[] { sbl.getY(), sbr.getY(), ebr.getY(), ebl.getY() }, new double[] { sbr.getZ(), sbr.getZ(), ebr.getZ(), ebl.getZ() }, u, v, texture, RenderMode.STATIC, false, cb, dest, destOffset + 4, "LineSegment.bottom"); return dest; }
From source file:org.orekit.bodies.JPLEphemeridesLoaderTest.java
@Test public void testEndianness() throws OrekitException, ParseException { Utils.setDataRoot("inpop"); JPLEphemeridesLoader.EphemerisType type = JPLEphemeridesLoader.EphemerisType.MARS; JPLEphemeridesLoader loaderInpopTCBBig = new JPLEphemeridesLoader("^inpop.*_TCB_.*_bigendian\\.dat$", type); CelestialBody bodysInpopTCBBig = loaderInpopTCBBig.loadCelestialBody(CelestialBodyFactory.MARS); Assert.assertEquals(1.0, loaderInpopTCBBig.getLoadedConstant("TIMESC"), 1.0e-10); JPLEphemeridesLoader loaderInpopTCBLittle = new JPLEphemeridesLoader("^inpop.*_TCB_.*_littleendian\\.dat$", type);//w w w .j a v a 2 s . c o m CelestialBody bodysInpopTCBLittle = loaderInpopTCBLittle.loadCelestialBody(CelestialBodyFactory.MARS); Assert.assertEquals(1.0, loaderInpopTCBLittle.getLoadedConstant("TIMESC"), 1.0e-10); AbsoluteDate t0 = new AbsoluteDate(1969, 7, 17, 10, 43, 23.4, TimeScalesFactory.getTT()); Frame eme2000 = FramesFactory.getEME2000(); for (double dt = 0; dt < 30 * Constants.JULIAN_DAY; dt += 3600) { AbsoluteDate date = t0.shiftedBy(dt); Vector3D pInpopTCBBig = bodysInpopTCBBig.getPVCoordinates(date, eme2000).getPosition(); Vector3D pInpopTCBLittle = bodysInpopTCBLittle.getPVCoordinates(date, eme2000).getPosition(); Assert.assertEquals(0.0, pInpopTCBBig.distance(pInpopTCBLittle), 1.0e-10); } for (String name : DataProvidersManager.getInstance().getLoadedDataNames()) { Assert.assertTrue(name.contains("inpop")); } }
From source file:org.orekit.bodies.JPLEphemeridesLoaderTest.java
@Test public void testInpopvsJPL() throws OrekitException, ParseException { Utils.setDataRoot("regular-data:inpop"); JPLEphemeridesLoader.EphemerisType type = JPLEphemeridesLoader.EphemerisType.MARS; JPLEphemeridesLoader loaderDE405 = new JPLEphemeridesLoader("^unxp(\\d\\d\\d\\d)\\.405$", type); CelestialBody bodysDE405 = loaderDE405.loadCelestialBody(CelestialBodyFactory.MARS); JPLEphemeridesLoader loaderInpopTDBBig = new JPLEphemeridesLoader("^inpop.*_TDB_.*_bigendian\\.dat$", type); CelestialBody bodysInpopTDBBig = loaderInpopTDBBig.loadCelestialBody(CelestialBodyFactory.MARS); Assert.assertEquals(0.0, loaderInpopTDBBig.getLoadedConstant("TIMESC"), 1.0e-10); JPLEphemeridesLoader loaderInpopTCBBig = new JPLEphemeridesLoader("^inpop.*_TCB_.*_bigendian\\.dat$", type); CelestialBody bodysInpopTCBBig = loaderInpopTCBBig.loadCelestialBody(CelestialBodyFactory.MARS); Assert.assertEquals(1.0, loaderInpopTCBBig.getLoadedConstant("TIMESC"), 1.0e-10); AbsoluteDate t0 = new AbsoluteDate(1969, 7, 17, 10, 43, 23.4, TimeScalesFactory.getTT()); Frame eme2000 = FramesFactory.getEME2000(); for (double dt = 0; dt < 30 * Constants.JULIAN_DAY; dt += 3600) { AbsoluteDate date = t0.shiftedBy(dt); Vector3D pDE405 = bodysDE405.getPVCoordinates(date, eme2000).getPosition(); Vector3D pInpopTDBBig = bodysInpopTDBBig.getPVCoordinates(date, eme2000).getPosition(); Vector3D pInpopTCBBig = bodysInpopTCBBig.getPVCoordinates(date, eme2000).getPosition(); Assert.assertTrue(pDE405.distance(pInpopTDBBig) > 650.0); Assert.assertTrue(pDE405.distance(pInpopTDBBig) < 1050.0); Assert.assertTrue(pDE405.distance(pInpopTCBBig) > 1350.0); Assert.assertTrue(pDE405.distance(pInpopTCBBig) < 1900.0); }/* ww w .j ava2 s .c o m*/ }
From source file:org.orekit.bodies.OneAxisEllipsoidTest.java
@Test public void testOnSurface() throws OrekitException { Vector3D surfacePoint = new Vector3D(-1092200.775949484, -3944945.7282234835, 4874931.946956173); OneAxisEllipsoid earthShape = new OneAxisEllipsoid(6378136.460, 1 / 298.257222101, FramesFactory.getITRF(IERSConventions.IERS_2010, true)); GeodeticPoint gp = earthShape.transform(surfacePoint, earthShape.getBodyFrame(), AbsoluteDate.J2000_EPOCH); Vector3D rebuilt = earthShape.transform(gp); Assert.assertEquals(0, rebuilt.distance(surfacePoint), 3.0e-9); }
From source file:org.orekit.bodies.OneAxisEllipsoidTest.java
@Test public void testNegativeZ() throws OrekitException { AbsoluteDate date = AbsoluteDate.J2000_EPOCH; Frame frame = FramesFactory.getITRF(IERSConventions.IERS_2010, true); OneAxisEllipsoid model = new OneAxisEllipsoid(90.0, 5.0 / 9.0, frame); Vector3D point = new Vector3D(140.0, 0.0, -30.0); GeodeticPoint gp = model.transform(point, frame, date); Vector3D rebuilt = model.transform(gp); Assert.assertEquals(0.0, rebuilt.distance(point), 1.0e-10); }
From source file:org.orekit.bodies.OneAxisEllipsoidTest.java
@Test public void testEquatorialInside() throws OrekitException { AbsoluteDate date = AbsoluteDate.J2000_EPOCH; Frame frame = FramesFactory.getITRF(IERSConventions.IERS_2010, true); OneAxisEllipsoid model = new OneAxisEllipsoid(90.0, 5.0 / 9.0, frame); for (double rho = 0; rho < model.getEquatorialRadius(); rho += 0.01) { Vector3D point = new Vector3D(rho, 0.0, 0.0); GeodeticPoint gp = model.transform(point, frame, date); Vector3D rebuilt = model.transform(gp); Assert.assertEquals(0.0, rebuilt.distance(point), 1.0e-10); }/*from ww w . j a va 2 s .co m*/ }