From 8d0b513e6b0e75e66103e4fd1ba9983f3ee51714 Mon Sep 17 00:00:00 2001 From: Luc Maisonobe <luc@orekit.org> Date: Wed, 2 Apr 2014 11:20:30 +0200 Subject: [PATCH] Slight speed-up with a dedicated pointOnGround method. --- .../org/orekit/rugged/core/ExtendedEllipsoid.java | 13 +++++++++++++ .../org/orekit/rugged/core/IgnoreDEMAlgorithm.java | 3 +-- .../rugged/core/duvenhage/DuvenhageAlgorithm.java | 3 +-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/orekit/rugged/core/ExtendedEllipsoid.java b/src/main/java/org/orekit/rugged/core/ExtendedEllipsoid.java index bb267bd3..e092e05a 100644 --- a/src/main/java/org/orekit/rugged/core/ExtendedEllipsoid.java +++ b/src/main/java/org/orekit/rugged/core/ExtendedEllipsoid.java @@ -16,6 +16,7 @@ */ package org.orekit.rugged.core; +import org.apache.commons.math3.geometry.euclidean.threed.Line; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.commons.math3.util.FastMath; import org.orekit.bodies.GeodeticPoint; @@ -145,6 +146,18 @@ public class ExtendedEllipsoid extends OneAxisEllipsoid { } + /** Get point on ground along a pixel line of sight. + * @param position pixel position (in body frame) + * @param los pixel line-of-sight, not necessarily normalized (in body frame) + * @return point on ground + * @exception OrekitException if no such point exists (typically line-of-sight missing body) + */ + public GeodeticPoint pointOnGround(final Vector3D position, final Vector3D los) + throws OrekitException { + return getIntersectionPoint(new Line(position, new Vector3D(1, position, 1e6, los), 1.0e-12), + position, getBodyFrame(), null); + } + /** Get point at some altitude along a pixel line of sight. * @param position pixel position (in body frame) * @param los pixel line-of-sight, not necessarily normalized (in body frame) diff --git a/src/main/java/org/orekit/rugged/core/IgnoreDEMAlgorithm.java b/src/main/java/org/orekit/rugged/core/IgnoreDEMAlgorithm.java index 5dfa5fd3..6f04136e 100644 --- a/src/main/java/org/orekit/rugged/core/IgnoreDEMAlgorithm.java +++ b/src/main/java/org/orekit/rugged/core/IgnoreDEMAlgorithm.java @@ -48,8 +48,7 @@ public class IgnoreDEMAlgorithm implements IntersectionAlgorithm { final Vector3D position, final Vector3D los) throws RuggedException { try { - return ellipsoid.transform(ellipsoid.pointAtAltitude(position, los, 0.0), - ellipsoid.getBodyFrame(), null); + return ellipsoid.pointOnGround(position, los); } catch (OrekitException oe) { // this should never happen throw new RuggedException(oe, oe.getSpecifier(), oe.getParts()); diff --git a/src/main/java/org/orekit/rugged/core/duvenhage/DuvenhageAlgorithm.java b/src/main/java/org/orekit/rugged/core/duvenhage/DuvenhageAlgorithm.java index dca15184..b81cb98d 100644 --- a/src/main/java/org/orekit/rugged/core/duvenhage/DuvenhageAlgorithm.java +++ b/src/main/java/org/orekit/rugged/core/duvenhage/DuvenhageAlgorithm.java @@ -63,8 +63,7 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { try { // compute intersection with ellipsoid - final Vector3D p0 = ellipsoid.pointAtAltitude(position, los, 0.0); - final GeodeticPoint gp0 = ellipsoid.transform(p0, ellipsoid.getBodyFrame(), null); + final GeodeticPoint gp0 = ellipsoid.pointOnGround(position, los); // locate the entry tile along the line-of-sight MinMaxTreeTile tile = cache.getTile(gp0.getLatitude(), gp0.getLongitude()); -- GitLab