[ https://issues.apache.org/jira/browse/LUCENE-8276?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16453589#comment-16453589 ]
ASF subversion and git services commented on LUCENE-8276: --------------------------------------------------------- Commit f6378894e8fd43f39d44db29c5dca21c52ffe7cf in lucene-solr's branch refs/heads/branch_6x from [~kwri...@metacarta.com] [ https://git-wip-us.apache.org/repos/asf?p=lucene-solr.git;h=f637889 ] LUCENE-8276: Restructure complex polygon class yet again to allow dual test points. > GeoComplexPolygon failures > -------------------------- > > Key: LUCENE-8276 > URL: https://issues.apache.org/jira/browse/LUCENE-8276 > Project: Lucene - Core > Issue Type: Bug > Components: modules/spatial3d > Reporter: Ignacio Vera > Assignee: Ignacio Vera > Priority: Major > Attachments: LUCENE-8276-random.patch, LUCENE-8276-test.patch, > LUCENE-8276.patch > > > I have tightened a bit more the random test for polygons and > GeoComplexPolygons still shows issues when traveling planes that are cutting > the world near the pole. I could identify three cases: > > case 1) It happens when the check point is on aone of the test point planes > but the planes is close to the pole and cannot be traversed. In that case we > hit the following part of the code: > {code:java} > } else if (testPointFixedYPlane.evaluateIsZero(x, y, z) || > testPointFixedXPlane.evaluateIsZero(x, y, z) || > testPointFixedZPlane.evaluateIsZero(x, y, z)) { > throw new IllegalArgumentException("Can't compute isWithin for specified > point"); > } else {{code} > > It seems this check is unnecesary. If removed then a traversal is choosen and > evrything works as expected. > > case 2) In this case a {{DualCrossingEdgeIterator}} is used with one of the > planes being close to the pole but inside current restricutions (is a valid > traversal). I think the problem happens when computing the intersection > points for above and below plane in {{computeInsideOutside}}: > {code:java} > final GeoPoint[] outsideOutsidePoints = > testPointOutsidePlane.findIntersections(planetModel, travelOutsidePlane); > //these don't add anything: , checkPointCutoffPlane, testPointCutoffPlane); > final GeoPoint outsideOutsidePoint = > pickProximate(outsideOutsidePoints);{code} > The intersection above results in two points close to each other and close to > the intersection point, and therefore {{pickProximate}} fails in choosing the > right one. > case 3) In this case a {{LinearCrossingEdgeIterator}} is used with the plane > being close to the pole. In this case when evaluating the intersection > between an edge and the plane, we get two intersections (because are very > close together) inside the bounds instead of one. The result is too many > crossings. > > After evaluating this errors I think we should really prevent using planes > that are near a pole. I attached a new version of {{GeoComplexPolygon}} that > seems to solve this issues. The approach is the following: > {{NEAR_EDGE_CUTOFF}} is not expressed as a linear distance but as a > percentage, curerntly 0.75 . If ab is the value of a semiaxis, the logic > disallows to travel a plane if the distance between the plane and the center > of the world is bigger that {{NEAR_EDGE_CUTOFF}} * pole. > > > > > > > > -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org