craigtaverner commented on code in PR #13980:
URL: https://github.com/apache/lucene/pull/13980#discussion_r1832435160


##########
lucene/core/src/java/org/apache/lucene/geo/Tessellator.java:
##########
@@ -390,12 +377,108 @@ private static final void eliminateHole(
     }
   }
 
+  /** Choose a common vertex between the polygon and the hole if it exists, 
otherwise return null */

Review Comment:
   The comment and method name do not match the behaviour. This method does not 
find and return a common point. Instead it finds a common point and if it 
exists, merges the hole(s) into the outer polygon and returns true so that the 
alternative approach of Eberly's, does not need to run. Perhaps a name like 
`mergeHolesWithSharedVertices` would work better?



##########
lucene/core/src/test/org/apache/lucene/geo/TestTessellator.java:
##########
@@ -928,12 +848,42 @@ public void testComplexPolygon55() throws Exception {
   public void testComplexPolygon56() throws Exception {
     String geoJson = GeoTestUtil.readShape("github-12352-2.geojson.gz");
     Polygon[] polygons = Polygon.fromGeoJSON(geoJson);
-    for (Polygon polygon : polygons) {
-      List<Tessellator.Triangle> tessellation =
-          Tessellator.tessellate(polygon, random().nextBoolean());
-      assertEquals(area(polygon), area(tessellation), 0.0);
-      // don't check edges as it takes several minutes
-    }
+    checkMultiPolygon(polygons, 3e-11);
+  }
+
+  public void testComplexPolygon57() throws Exception {
+    String geoJson = GeoTestUtil.readShape("github-13841-1.geojson.gz");
+    Polygon[] polygons = Polygon.fromGeoJSON(geoJson);
+    checkMultiPolygon(polygons, 3e-11);
+  }
+
+  @Nightly
+  public void testComplexPolygon58() throws Exception {
+    String wkt = GeoTestUtil.readShape("github-13841-2.geojson.gz");
+    checkMultiPolygon(wkt);
+  }
+
+  @Nightly
+  public void testComplexPolygon59() throws Exception {
+    String wkt = GeoTestUtil.readShape("github-13841-3.geojson.gz");
+    Polygon[] polygons = (Polygon[]) SimpleWKTShapeParser.parse(wkt);
+    checkMultiPolygon(polygons, 1e-11);
+  }
+
+  public void testComplexPolygon60() throws Exception {
+    String wkt =
+        "POLYGON((0 0, 5 1, 10 0, 11 5, 10 10,5 11, 0 10, 1 5, 0 0),"

Review Comment:
   Nice test, this polygon is quite a work of art! Lots of holes with common 
edges and a wide range of angles.



##########
lucene/core/src/test/org/apache/lucene/geo/TestTessellator.java:
##########
@@ -928,12 +848,42 @@ public void testComplexPolygon55() throws Exception {
   public void testComplexPolygon56() throws Exception {
     String geoJson = GeoTestUtil.readShape("github-12352-2.geojson.gz");
     Polygon[] polygons = Polygon.fromGeoJSON(geoJson);
-    for (Polygon polygon : polygons) {
-      List<Tessellator.Triangle> tessellation =
-          Tessellator.tessellate(polygon, random().nextBoolean());
-      assertEquals(area(polygon), area(tessellation), 0.0);
-      // don't check edges as it takes several minutes

Review Comment:
   I see you added back the edges check here, so perhaps this comment was not 
valid and this test is not taking several minutes?



##########
lucene/core/src/java/org/apache/lucene/geo/Tessellator.java:
##########
@@ -350,30 +349,18 @@ private static final Node eliminateHoles(
   }
 
   /** Finds a bridge between vertices that connects a hole with an outer ring, 
and links it */
-  private static final void eliminateHole(
+  private static void eliminateHole(
       final Node holeNode,
       Node outerNode,
       double holeMinX,
       double holeMaxX,
       double holeMinY,
       double holeMaxY) {
-    // Attempt to find a common point between the HoleNode and OuterNode.
-    Node next = outerNode;
-    do {
-      if (Rectangle.containsPoint(
-          next.getY(), next.getX(), holeMinY, holeMaxY, holeMinX, holeMaxX)) {
-        Node sharedVertex = getSharedVertex(holeNode, next);
-        if (sharedVertex != null) {
-          // Split the resulting polygon.
-          Node node = splitPolygon(next, sharedVertex, true);
-          // Filter the split nodes.
-          filterPoints(node, node.next);
-          return;
-        }
-      }
-      next = next.next;
-    } while (next != outerNode);
 
+    // Attempt to find a common point between the HoleNode and OuterNode.

Review Comment:
   This comment and method name should probably change, as discussed in the 
other comment.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to