You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Nicholas Knize (JIRA)" <ji...@apache.org> on 2019/03/05 18:38:00 UTC

[jira] [Commented] (LUCENE-8712) Polygon2D does not detect crossings in some cases

    [ https://issues.apache.org/jira/browse/LUCENE-8712?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16784760#comment-16784760 ] 

Nicholas Knize commented on LUCENE-8712:
----------------------------------------

I took a quick look at this and agree the test case posted exposes a bug in {{EdgeTree.relateTriangle}}. The problem is in LUCENE-8679 we added a binary condition that {{CELL_OUTSIDE_QUERY}} unless {{insideEdges == 3}}. Instead, {{insideEdges != 3}} but  {{insideEdges > 0}} should return {{CELL_CROSSES}} query. 

Another important thing to note, {{GeoUtils.lineRelateLine}} satisfies the commutative property. So line order does not matter: line 1 terminating at line 2 == line 2 terminating at line 1 == {{CELL_INSIDE_QUERY}}

> Polygon2D does not detect crossings in some cases
> -------------------------------------------------
>
>                 Key: LUCENE-8712
>                 URL: https://issues.apache.org/jira/browse/LUCENE-8712
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Ignacio Vera
>            Priority: Major
>         Attachments: LUCENE-8712.patch, LUCENE-8712.patch
>
>
> Polygon2D does not detect crossing if the triangle crosses through points of the polygon and none of the points are inside it. For example:
>  
> {code:java}
> public void testLineCrossingPolygonPoints() {
>   Polygon p = new Polygon(new double[] {0, -1, 0, 1, 0}, new double[] {-1, 0, 1, 0, -1});
>   Polygon2D polygon2D = Polygon2D.create(p);
>   PointValues.Relation rel = polygon2D.relateTriangle(GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(-1.5)),
>       GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(0)),
>       GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(1.5)),
>       GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(0)),
>       GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(-1.5)),
>       GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(0)));
>   assertEquals(PointValues.Relation.CELL_CROSSES_QUERY, rel);
> }{code}
> [~nknize] you might want to look at this as I am not sure what to do.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org