public class Polygon extends Object implements SpatialComparable
Modifier and Type | Field and Description |
---|---|
private double[] |
max
Maximum values
|
private double[] |
min
Minimum values
|
private List<Vector> |
points
The actual points
|
Constructor and Description |
---|
Polygon(List<Vector> points)
Constructor.
|
Polygon(List<Vector> points,
double minx,
double maxx,
double miny,
double maxy) |
Modifier and Type | Method and Description |
---|---|
void |
appendToBuffer(StringBuilder buf)
Append the polygon to the buffer.
|
boolean |
containsPoint2D(Vector v)
Point in polygon test, based on
http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
by W.
|
Vector |
get(int idx)
Get a vector by index.
|
int |
getDimensionality()
Returns the dimensionality of the object.
|
double |
getMax(int dimension)
Returns the maximum coordinate at the specified dimension.
|
double |
getMin(int dimension)
Returns the minimum coordinate at the specified dimension.
|
boolean |
intersects2DIncomplete(Polygon other)
Simple polygon intersection test.
|
ArrayListIter<Vector> |
iter()
Get an iterator to the vector contents.
|
int |
size()
Get the polygon length.
|
int |
testClockwise()
Test polygon orientation.
|
String |
toString() |
public ArrayListIter<Vector> iter()
public void appendToBuffer(StringBuilder buf)
buf
- Buffer to append topublic int size()
public Vector get(int idx)
idx
- Index to getpublic int getDimensionality()
SpatialComparable
getDimensionality
in interface SpatialComparable
public double getMin(int dimension)
SpatialComparable
getMin
in interface SpatialComparable
dimension
- the dimension for which the coordinate should be returned,
where 0 ≤ dimension < getDimensionality()
public double getMax(int dimension)
SpatialComparable
getMax
in interface SpatialComparable
dimension
- the dimension for which the coordinate should be returned,
where 0 ≤ dimension < getDimensionality()
public int testClockwise()
public boolean intersects2DIncomplete(Polygon other)
FIXME: while this is found on some web pages as "solution" and satisfies or needs, it clearly is not correct; not even for convex polygons: Consider a cross where the two bars are made out of four vertices each. No vertex is inside the other polygon, yet they intersect. I knew this before writing this code, but this O(n) code was the simplest thing to come up with, and it would work for our current data sets. A way to fix this is to augment it with the obvious O(n*n) segment intersection test. (Note that you will still need to test for point containment, since the whole polygon could be contained in the other!)
other
- Other polygonpublic boolean containsPoint2D(Vector v)
v
- Point to test