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:49:24 UTC
[lucene-solr] branch branch_8_8 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_8_8
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8_8 by this push:
new be8fb34 LUCENE-9870: Fix Circle2D intersectsLine t-value (distance) range clamp (#41)
be8fb34 is described below
commit be8fb34d3d34b2fa3ac4a320b4b2af796d112d34
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 | 3 ++-
.../src/java/org/apache/lucene/geo/Circle2D.java | 2 +-
.../test/org/apache/lucene/geo/TestCircle2D.java | 24 ++++++++++++++++++++++
3 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index d6c576e..c85e58d 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -7,7 +7,8 @@ http://s.apache.org/luceneversions
Bug Fixes
---------------------
-(No changes)
+
+* 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));
+ }
}