Example usage for org.apache.commons.math3.geometry.euclidean.threed Vector3D distance

List of usage examples for org.apache.commons.math3.geometry.euclidean.threed Vector3D distance

Introduction

In this page you can find the example usage for org.apache.commons.math3.geometry.euclidean.threed Vector3D distance.

Prototype

public double distance(Vector<Euclidean3D> v) 

Source Link

Usage

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*/
}