You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kw...@apache.org on 2016/04/14 22:25:24 UTC
lucene-solr:branch_6x: LUCENE-7221: Performance improvements for
large polygons.
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x e2c451e6f -> 1ca288e5e
LUCENE-7221: Performance improvements for large polygons.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/1ca288e5
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/1ca288e5
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/1ca288e5
Branch: refs/heads/branch_6x
Commit: 1ca288e5e9f5a57a09527acd01a7d44079e10694
Parents: e2c451e
Author: Karl Wright <Da...@gmail.com>
Authored: Thu Apr 14 16:23:20 2016 -0400
Committer: Karl Wright <Da...@gmail.com>
Committed: Thu Apr 14 16:24:21 2016 -0400
----------------------------------------------------------------------
.../lucene/spatial3d/geom/StandardXYZSolid.java | 39 +++++++++++++++++---
1 file changed, 33 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1ca288e5/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardXYZSolid.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardXYZSolid.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardXYZSolid.java
index 9d94c51..a88675a 100644
--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardXYZSolid.java
+++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardXYZSolid.java
@@ -40,6 +40,19 @@ class StandardXYZSolid extends BaseXYZSolid {
/** Max-Z plane */
protected final SidedPlane maxZPlane;
+ /** true if minXPlane intersects globe */
+ protected final boolean minXPlaneIntersects;
+ /** true if maxXPlane intersects globe */
+ protected final boolean maxXPlaneIntersects;
+ /** true if minYPlane intersects globe */
+ protected final boolean minYPlaneIntersects;
+ /** true if maxYPlane intersects globe */
+ protected final boolean maxYPlaneIntersects;
+ /** true if minZPlane intersects globe */
+ protected final boolean minZPlaneIntersects;
+ /** true if maxZPlane intersects globe */
+ protected final boolean maxZPlaneIntersects;
+
/** These are the edge points of the shape, which are defined to be at least one point on
* each surface area boundary. In the case of a solid, this includes points which represent
* the intersection of XYZ bounding planes and the planet, as well as points representing
@@ -112,6 +125,12 @@ class StandardXYZSolid extends BaseXYZSolid {
maxYPlane = null;
minZPlane = null;
maxZPlane = null;
+ minXPlaneIntersects = false;
+ maxXPlaneIntersects = false;
+ minYPlaneIntersects = false;
+ maxYPlaneIntersects = false;
+ minZPlaneIntersects = false;
+ maxZPlaneIntersects = false;
notableMinXPoints = null;
notableMaxXPoints = null;
notableMinYPoints = null;
@@ -154,6 +173,7 @@ class StandardXYZSolid extends BaseXYZSolid {
notableMinZPoints = glueTogether(minXminZ, maxXminZ, minYminZ, maxYminZ);
notableMaxZPoints = glueTogether(minXmaxZ, maxXmaxZ, minYmaxZ, maxYmaxZ);
+
//System.err.println(
// " notableMinXPoints="+Arrays.asList(notableMinXPoints)+" notableMaxXPoints="+Arrays.asList(notableMaxXPoints)+
// " notableMinYPoints="+Arrays.asList(notableMinYPoints)+" notableMaxYPoints="+Arrays.asList(notableMaxYPoints)+
@@ -302,6 +322,13 @@ class StandardXYZSolid extends BaseXYZSolid {
// " minYEdges="+Arrays.asList(minYEdges)+" maxYEdges="+Arrays.asList(maxYEdges)+
// " minZEdges="+Arrays.asList(minZEdges)+" maxZEdges="+Arrays.asList(maxZEdges));
+ minXPlaneIntersects = notableMinXPoints.length + minXEdges.length > 0;
+ maxXPlaneIntersects = notableMaxXPoints.length + maxXEdges.length > 0;
+ minYPlaneIntersects = notableMinYPoints.length + minYEdges.length > 0;
+ maxYPlaneIntersects = notableMaxYPoints.length + maxYEdges.length > 0;
+ minZPlaneIntersects = notableMinZPoints.length + minZEdges.length > 0;
+ maxZPlaneIntersects = notableMaxZPoints.length + maxZEdges.length > 0;
+
// Glue everything together. This is not a minimal set of edgepoints, as of now, but it does completely describe all shapes on the
// planet.
this.edgePoints = glueTogether(minXminY, minXmaxY, minXminZ, minXmaxZ,
@@ -366,12 +393,12 @@ class StandardXYZSolid extends BaseXYZSolid {
return OVERLAPS;
}
- if (path.intersects(minXPlane, notableMinXPoints, maxXPlane, minYPlane, maxYPlane, minZPlane, maxZPlane) ||
- path.intersects(maxXPlane, notableMaxXPoints, minXPlane, minYPlane, maxYPlane, minZPlane, maxZPlane) ||
- path.intersects(minYPlane, notableMinYPoints, maxYPlane, minXPlane, maxXPlane, minZPlane, maxZPlane) ||
- path.intersects(maxYPlane, notableMaxYPoints, minYPlane, minXPlane, maxXPlane, minZPlane, maxZPlane) ||
- path.intersects(minZPlane, notableMinZPoints, maxZPlane, minXPlane, maxXPlane, minYPlane, maxYPlane) ||
- path.intersects(maxZPlane, notableMaxZPoints, minZPlane, minXPlane, maxXPlane, minYPlane, maxYPlane)) {
+ if ((minXPlaneIntersects && path.intersects(minXPlane, notableMinXPoints, maxXPlane, minYPlane, maxYPlane, minZPlane, maxZPlane)) ||
+ (maxXPlaneIntersects && path.intersects(maxXPlane, notableMaxXPoints, minXPlane, minYPlane, maxYPlane, minZPlane, maxZPlane)) ||
+ (minYPlaneIntersects && path.intersects(minYPlane, notableMinYPoints, maxYPlane, minXPlane, maxXPlane, minZPlane, maxZPlane)) ||
+ (maxYPlaneIntersects && path.intersects(maxYPlane, notableMaxYPoints, minYPlane, minXPlane, maxXPlane, minZPlane, maxZPlane)) ||
+ (minZPlaneIntersects && path.intersects(minZPlane, notableMinZPoints, maxZPlane, minXPlane, maxXPlane, minYPlane, maxYPlane)) ||
+ (maxZPlaneIntersects && path.intersects(maxZPlane, notableMaxZPoints, minZPlane, minXPlane, maxXPlane, minYPlane, maxYPlane))) {
//System.err.println(" edges intersect");
return OVERLAPS;
}