mirror of https://github.com/apache/lucene.git
First cut of new class
This commit is contained in:
parent
38ebd906e8
commit
a5e24b213d
|
@ -0,0 +1,112 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.spatial3d.geom;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.BitSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GeoComplexPolygon objects are structures designed to handle very large numbers of edges.
|
||||||
|
* They perform very well in this case compared to the alternatives, which all have O(N) evaluation
|
||||||
|
* and O(N^2) setup times. Complex polygons have O(N) setup times and best case O(log(N))
|
||||||
|
* evaluation times.
|
||||||
|
*
|
||||||
|
* The tradeoff is that these objects perform object creation when evaluating intersects() and
|
||||||
|
* isWithin().
|
||||||
|
*
|
||||||
|
* @lucene.internal
|
||||||
|
*/
|
||||||
|
class GeoComplexPolygon extends GeoBasePolygon {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a complex polygon from multiple lists of points, and a single point which is known to be in or out of
|
||||||
|
* set.
|
||||||
|
*@param planetModel is the planet model.
|
||||||
|
*@param pointsList is the list of lists of edge points. The edge points describe edges, and have an implied
|
||||||
|
* return boundary, so that N edges require N points. These points have furthermore been filtered so that
|
||||||
|
* no adjacent points are identical (within the bounds of the definition used by this package). It is assumed
|
||||||
|
* that no edges intersect, but the structure can contain both outer rings as well as holes.
|
||||||
|
*@param testPoint is the point whose in/out of setness is known.
|
||||||
|
*@param testPointInSet is true if the test point is considered "within" the polygon.
|
||||||
|
*/
|
||||||
|
public GeoComplexPolygon(final PlanetModel planetModel, final List<List<GeoPoint>> pointsList, final GeoPoint testPoint, final boolean testPointInSet) {
|
||||||
|
super(planetModel);
|
||||||
|
// MHL
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Compute a legal point index from a possibly illegal one, that may have wrapped.
|
||||||
|
*@param index is the index.
|
||||||
|
*@return the normalized index.
|
||||||
|
*/
|
||||||
|
protected int legalIndex(int index) {
|
||||||
|
while (index >= points.size())
|
||||||
|
index -= points.size();
|
||||||
|
while (index < 0) {
|
||||||
|
index += points.size();
|
||||||
|
}
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isWithin(final double x, final double y, final double z) {
|
||||||
|
// MHL
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GeoPoint[] getEdgePoints() {
|
||||||
|
return edgePoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean intersects(final Plane p, final GeoPoint[] notablePoints, final Membership... bounds) {
|
||||||
|
// MHL
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getBounds(Bounds bounds) {
|
||||||
|
super.getBounds(bounds);
|
||||||
|
// MHL
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) {
|
||||||
|
// MHL
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
// MHL
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
// MHL
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "GeoComplexPolygon: {planetmodel=" + planetModel + "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue