lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kwri...@apache.org
Subject [1/2] lucene-solr:master: LUCENE-7357: If the points for path segment intersections are ambiguous, throw an IllegalArgumentException.
Date Tue, 28 Jun 2016 10:27:47 GMT
Repository: lucene-solr
Updated Branches:
  refs/heads/master 8c47d20d2 -> 7343b0547


LUCENE-7357: If the points for path segment intersections are ambiguous, throw an IllegalArgumentException.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d954c78c
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d954c78c
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d954c78c

Branch: refs/heads/master
Commit: d954c78cea8c7ae3777f8ed55c61a455d716443a
Parents: 36183ca
Author: Karl Wright <DaddyWri@gmail.com>
Authored: Tue Jun 28 06:27:21 2016 -0400
Committer: Karl Wright <DaddyWri@gmail.com>
Committed: Tue Jun 28 06:27:21 2016 -0400

----------------------------------------------------------------------
 .../lucene/spatial3d/geom/GeoStandardPath.java  | 35 +++++++++++++++-----
 .../apache/lucene/spatial3d/geom/XYZBounds.java |  2 +-
 .../lucene/spatial3d/geom/GeoPathTest.java      | 35 ++++++++++++++++++++
 3 files changed, 63 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d954c78c/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoStandardPath.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoStandardPath.java
b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoStandardPath.java
index 0f06717..51c5078 100755
--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoStandardPath.java
+++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoStandardPath.java
@@ -244,12 +244,14 @@ class GeoStandardPath extends GeoBasePath {
   @Override
   public boolean isWithin(final double x, final double y, final double z) {
     for (SegmentEndpoint pathPoint : endPoints) {
-      if (pathPoint.isWithin(x, y, z))
+      if (pathPoint.isWithin(x, y, z)) {
         return true;
+      }
     }
     for (PathSegment pathSegment : segments) {
-      if (pathSegment.isWithin(x, y, z))
+      if (pathSegment.isWithin(x, y, z)) {
         return true;
+      }
     }
     return false;
   }
@@ -626,7 +628,7 @@ class GeoStandardPath extends GeoBasePath {
       this.start = start;
       this.end = end;
       this.normalizedConnectingPlane = normalizedConnectingPlane;
-        
+      
       // Either start or end should be on the correct side
       upperConnectingPlane = new SidedPlane(start, normalizedConnectingPlane, -planeBoundingOffset);
       lowerConnectingPlane = new SidedPlane(start, normalizedConnectingPlane, planeBoundingOffset);
@@ -642,21 +644,33 @@ class GeoStandardPath extends GeoBasePath {
       if (points.length == 0) {
         throw new IllegalArgumentException("Some segment boundary points are off the ellipsoid;
path too wide");
       }
+      if (points.length > 1) {
+        throw new IllegalArgumentException("Ambiguous boundary points; path too short");
+      }
       this.ULHC = points[0];
       points = upperConnectingPlane.findIntersections(planetModel, endCutoffPlane, lowerSide,
startSide);
       if (points.length == 0) {
         throw new IllegalArgumentException("Some segment boundary points are off the ellipsoid;
path too wide");
       }
+      if (points.length > 1) {
+        throw new IllegalArgumentException("Ambiguous boundary points; path too short");
+      }
       this.URHC = points[0];
       points = lowerConnectingPlane.findIntersections(planetModel, startCutoffPlane, upperSide,
endSide);
       if (points.length == 0) {
         throw new IllegalArgumentException("Some segment boundary points are off the ellipsoid;
path too wide");
       }
+      if (points.length > 1) {
+        throw new IllegalArgumentException("Ambiguous boundary points; path too short");
+      }
       this.LLHC = points[0];
       points = lowerConnectingPlane.findIntersections(planetModel, endCutoffPlane, upperSide,
startSide);
       if (points.length == 0) {
         throw new IllegalArgumentException("Some segment boundary points are off the ellipsoid;
path too wide");
       }
+      if (points.length > 1) {
+        throw new IllegalArgumentException("Ambiguous boundary points; path too short");
+      }
       this.LRHC = points[0];
       upperConnectingPlanePoints = new GeoPoint[]{ULHC, URHC};
       lowerConnectingPlanePoints = new GeoPoint[]{LLHC, LRHC};
@@ -791,11 +805,16 @@ class GeoStandardPath extends GeoBasePath {
      */
     public void getBounds(final PlanetModel planetModel, Bounds bounds) {
       // We need to do all bounding planes as well as corner points
-      bounds.addPoint(start).addPoint(end).addPoint(ULHC).addPoint(URHC).addPoint(LRHC).addPoint(LLHC);
-      bounds.addPlane(planetModel, upperConnectingPlane, lowerConnectingPlane, startCutoffPlane,
endCutoffPlane);
-      bounds.addPlane(planetModel, lowerConnectingPlane, upperConnectingPlane, startCutoffPlane,
endCutoffPlane);
-      bounds.addPlane(planetModel, startCutoffPlane, endCutoffPlane, upperConnectingPlane,
lowerConnectingPlane);
-      bounds.addPlane(planetModel, endCutoffPlane, startCutoffPlane, upperConnectingPlane,
lowerConnectingPlane);
+      bounds.addPoint(start).addPoint(end)
+        .addPoint(ULHC).addPoint(URHC).addPoint(LRHC).addPoint(LLHC)
+        .addPlane(planetModel, upperConnectingPlane, lowerConnectingPlane, startCutoffPlane,
endCutoffPlane)
+        .addPlane(planetModel, lowerConnectingPlane, upperConnectingPlane, startCutoffPlane,
endCutoffPlane)
+        .addPlane(planetModel, startCutoffPlane, endCutoffPlane, upperConnectingPlane, lowerConnectingPlane)
+        .addPlane(planetModel, endCutoffPlane, startCutoffPlane, upperConnectingPlane, lowerConnectingPlane)
+        .addIntersection(planetModel, upperConnectingPlane, startCutoffPlane, lowerConnectingPlane,
endCutoffPlane)
+        .addIntersection(planetModel, startCutoffPlane, lowerConnectingPlane, endCutoffPlane,
upperConnectingPlane)
+        .addIntersection(planetModel, lowerConnectingPlane, endCutoffPlane, upperConnectingPlane,
startCutoffPlane)
+        .addIntersection(planetModel, endCutoffPlane, upperConnectingPlane, startCutoffPlane,
lowerConnectingPlane);
     }
 
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d954c78c/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/XYZBounds.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/XYZBounds.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/XYZBounds.java
index 9f44157..85659ab 100644
--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/XYZBounds.java
+++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/XYZBounds.java
@@ -30,7 +30,7 @@ public class XYZBounds implements Bounds {
    * unacceptably large.
    * Also, see LUCENE-7290 for a description of how geometry can magnify the bounds delta.
    */
-  private static final double FUDGE_FACTOR = Vector.MINIMUM_RESOLUTION * 1000.0;
+  private static final double FUDGE_FACTOR = Vector.MINIMUM_RESOLUTION * 1e3;
   
   /** Minimum x */
   private Double minX = null;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d954c78c/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPathTest.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPathTest.java b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPathTest.java
index f5dd8b0..648854e 100755
--- a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPathTest.java
+++ b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPathTest.java
@@ -267,4 +267,39 @@ public class GeoPathTest {
     p.done();//at least test this doesn't bomb like it used too -- LUCENE-6520
   }
 
+  @Test
+  public void testFailure1() {
+    /*
+   GeoStandardPath: {planetmodel=PlanetModel.WGS84, width=1.117010721276371(64.0), points={[
+   [lat=2.18531083006635E-12, lon=-3.141592653589793([X=-1.0011188539924791, Y=-1.226017000107956E-16,
Z=2.187755873813378E-12])], 
+   [lat=0.0, lon=-3.141592653589793([X=-1.0011188539924791, Y=-1.226017000107956E-16, Z=0.0])]]}}
+    */
+    final GeoPoint[] points = new GeoPoint[]{
+      new GeoPoint(PlanetModel.WGS84, 2.18531083006635E-12, -3.141592653589793),
+      new GeoPoint(PlanetModel.WGS84, 0.0, -3.141592653589793)};
+    
+    final GeoPath path;
+    try {
+      path = GeoPathFactory.makeGeoPath(PlanetModel.WGS84,
+        1.117010721276371, points);
+    } catch (IllegalArgumentException e) {
+      return;
+    }
+    assertTrue(false);
+    
+    final GeoPoint point = new GeoPoint(PlanetModel.WGS84, -2.848117399637174E-91, -1.1092122135274942);
+    System.err.println("point = "+point);
+      
+    final XYZBounds bounds = new XYZBounds();
+    path.getBounds(bounds);
+      
+    final XYZSolid solid = XYZSolidFactory.makeXYZSolid(PlanetModel.WGS84,
+      bounds.getMinimumX(), bounds.getMaximumX(),
+      bounds.getMinimumY(), bounds.getMaximumY(),
+      bounds.getMinimumZ(), bounds.getMaximumZ());
+      
+    assertTrue(path.isWithin(point));
+    assertTrue(solid.isWithin(point));
+  }
+  
 }


Mime
View raw message