Skip to content
Snippets Groups Projects
Commit 2112ad97 authored by Luc Maisonobe's avatar Luc Maisonobe
Browse files

First working version of BasicScanAlgorithm.

The case where the line-of-sight enters the Digital Elevation Model in
one tile on top and exit it in another tile on bottom is not tested yet.
parent 875fb674
No related branches found
No related tags found
No related merge requests found
...@@ -81,12 +81,12 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm { ...@@ -81,12 +81,12 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm {
scannedTiles.clear(); scannedTiles.clear();
// compute entry and exit points // compute entry and exit points
entryPoint = ellipsoid.transform(ellipsoid.pointAtAltitude(position, los, Double.isInfinite(hMin) ? 0.0 : hMin), entryPoint = ellipsoid.transform(ellipsoid.pointAtAltitude(position, los, Double.isInfinite(hMax) ? 0.0 : hMax),
ellipsoid.getBodyFrame(), null); ellipsoid.getBodyFrame(), null);
final SimpleTile entryTile = cache.getTile(entryPoint.getLatitude(), entryPoint.getLongitude()); final SimpleTile entryTile = cache.getTile(entryPoint.getLatitude(), entryPoint.getLongitude());
addIfNotPresent(scannedTiles, entryTile); addIfNotPresent(scannedTiles, entryTile);
exitPoint = ellipsoid.transform(ellipsoid.pointAtAltitude(position, los, Double.isInfinite(hMax) ? 0.0 : hMax), exitPoint = ellipsoid.transform(ellipsoid.pointAtAltitude(position, los, Double.isInfinite(hMin) ? 0.0 : hMin),
ellipsoid.getBodyFrame(), null); ellipsoid.getBodyFrame(), null);
final SimpleTile exitTile = cache.getTile(exitPoint.getLatitude(), exitPoint.getLongitude()); final SimpleTile exitTile = cache.getTile(exitPoint.getLatitude(), exitPoint.getLongitude());
addIfNotPresent(scannedTiles, entryTile); addIfNotPresent(scannedTiles, entryTile);
...@@ -116,8 +116,8 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm { ...@@ -116,8 +116,8 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm {
GeodeticPoint intersectionGP = null; GeodeticPoint intersectionGP = null;
double intersectionDot = Double.POSITIVE_INFINITY; double intersectionDot = Double.POSITIVE_INFINITY;
for (final SimpleTile tile : scannedTiles) { for (final SimpleTile tile : scannedTiles) {
for (int i = latitudeIndex(tile, minLatitude); i < latitudeIndex(tile, maxLatitude); ++i) { for (int i = latitudeIndex(tile, minLatitude); i <= latitudeIndex(tile, maxLatitude); ++i) {
for (int j = longitudeIndex(tile, minLongitude); j < longitudeIndex(tile, maxLongitude); ++j) { for (int j = longitudeIndex(tile, minLongitude); j <= longitudeIndex(tile, maxLongitude); ++j) {
GeodeticPoint gp = tile.pixelIntersection(entryPoint, exitPoint, i, j); GeodeticPoint gp = tile.pixelIntersection(entryPoint, exitPoint, i, j);
if (gp != null) { if (gp != null) {
final Vector3D point = ellipsoid.transform(gp); final Vector3D point = ellipsoid.transform(gp);
......
...@@ -214,7 +214,7 @@ public class BasicScanAlgorithmTest { ...@@ -214,7 +214,7 @@ public class BasicScanAlgorithmTest {
Vector3D position = state.getPVCoordinates(earth.getBodyFrame()).getPosition(); Vector3D position = state.getPVCoordinates(earth.getBodyFrame()).getPosition();
Vector3D los = groundP.subtract(position); Vector3D los = groundP.subtract(position);
GeodeticPoint result = basicScan.intersection(earth, position, los); GeodeticPoint result = basicScan.intersection(earth, position, los);
Assert.assertEquals(0.0, groundP.distance(earth.transform(result)), 0.03); Assert.assertEquals(0.0, groundP.distance(earth.transform(result)), 1.0e-10);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment