You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by iv...@apache.org on 2021/03/30 05:46:12 UTC

[lucene-solr] branch branch_8x updated: LUCENE-9870: Fix Circle2D intersectsLine t-value (distance) range clamp (#41)

This is an automated email from the ASF dual-hosted git repository.

ivera pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new c066944  LUCENE-9870: Fix Circle2D intersectsLine t-value (distance) range clamp (#41)
c066944 is described below

commit c066944d35ea4fb137303295475d529f679c08f3
Author: Jørgen Nystad <jn...@avinet.no>
AuthorDate: Mon Mar 29 10:41:54 2021 +0200

    LUCENE-9870: Fix Circle2D intersectsLine t-value (distance) range clamp (#41)
---
 lucene/CHANGES.txt                                 |  7 +++++++
 .../src/java/org/apache/lucene/geo/Circle2D.java   |  2 +-
 .../test/org/apache/lucene/geo/TestCircle2D.java   | 24 ++++++++++++++++++++++
 3 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 987408b..1c5b425 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -73,6 +73,13 @@ Other
 
 * LUCENE-9836: Migrate Maven tasks to use "maven-resolver-ant-tasks"
   instead of the no longer maintained "maven-ant-tasks".  (Uwe Schindler)
+
+======================= Lucene 8.8.2 =======================
+
+Bug Fixes
+---------------------
+
+* LUCENE-9870: Fix Circle2D intersectsLine t-value (distance) range clamp (Jørgen Nystad)
   
 ======================= Lucene 8.8.1 =======================
 
diff --git a/lucene/core/src/java/org/apache/lucene/geo/Circle2D.java b/lucene/core/src/java/org/apache/lucene/geo/Circle2D.java
index 4cc64ed..0d0cb4d 100644
--- a/lucene/core/src/java/org/apache/lucene/geo/Circle2D.java
+++ b/lucene/core/src/java/org/apache/lucene/geo/Circle2D.java
@@ -171,7 +171,7 @@ class Circle2D implements Component2D {
 
     final double distance = dotProduct / magnitudeAB;
 
-    if (distance < 0 || distance > dotProduct) {
+    if (distance < 0 || distance > 1) {
       return false;
     }
 
diff --git a/lucene/core/src/test/org/apache/lucene/geo/TestCircle2D.java b/lucene/core/src/test/org/apache/lucene/geo/TestCircle2D.java
index 6726a75..50fdd2b 100644
--- a/lucene/core/src/test/org/apache/lucene/geo/TestCircle2D.java
+++ b/lucene/core/src/test/org/apache/lucene/geo/TestCircle2D.java
@@ -165,4 +165,28 @@ public class TestCircle2D extends LuceneTestCase {
       }
     }
   }
+
+  public void testLineIntersects() {
+    Component2D circle2D;
+    if (random().nextBoolean()) {
+      Circle circle = new Circle(0, 0, 35000);
+      circle2D = LatLonGeometry.create(circle);
+    } else {
+      XYCircle xyCircle = new XYCircle(0, 0, 0.3f);
+      circle2D = XYGeometry.create(xyCircle);
+    }
+
+    double ax = -0.25;
+    double ay = 0.25;
+    double bx = 0.25;
+    double by = 0.25;
+    double cx = 0.2;
+    double cy = 0.25;
+    // Test A->B, circle touches center of line, line is less than 1 unit long
+    assertTrue(circle2D.intersectsLine(ax, ay, bx, by));
+    // Test B->C, circle doesn't touch line itself, but touches extended line at t > 1
+    assertFalse(circle2D.intersectsLine(bx, by, cx, cy));
+    // Test C->B, circle doesn't touch line itself, but touches extended line at t < 0
+    assertFalse(circle2D.intersectsLine(cx, cy, bx, by));
+  }
 }