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));
+ }
}