public class PolygonsIntersection extends Object
This is an implementation of the algorithm described in http://alienryderflex.com and augmented with using a custom interval tree to avoid testing all polygon edges against a point, but only those that intersect the imaginary ray along the same y co-ordinate of the search point. This algorithm additionally also supports multiple polygons.
This class is thread-safe and can be used in a multithreaded environment when testing many points against the same polygon concurrently.
Reference: http://alienryderflex.com
| Modifier and Type | Field and Description |
|---|---|
protected float[] |
verticesXY |
| Constructor and Description |
|---|
PolygonsIntersection(float[] verticesXY,
int[] polygons,
int count)
Create a new
PolygonsIntersection object with the given polygon vertices. |
| Modifier and Type | Method and Description |
|---|---|
boolean |
testPoint(float x,
float y)
Test whether the given point
(x, y) lies inside any polygon stored in this PolygonsIntersection object. |
boolean |
testPoint(float x,
float y,
BitSet inPolys)
Test whether the given point
(x, y) lies inside any polygon stored in this PolygonsIntersection object. |
public PolygonsIntersection(float[] verticesXY,
int[] polygons,
int count)
PolygonsIntersection object with the given polygon vertices.
The verticesXY array contains the x and y coordinates of all vertices. This array will not be copied so its content must remain constant for
as long as the PolygonPointIntersection is used with it.
verticesXY - contains the x and y coordinates of all verticespolygons - defines the start vertices of a new polygon. The first vertex of the first polygon is always the
vertex with index 0. In order to define a hole simply define a polygon that is completely inside another polygoncount - the number of vertices to use from the verticesXY array, staring with index 0public boolean testPoint(float x,
float y)
(x, y) lies inside any polygon stored in this PolygonsIntersection object.
This method is thread-safe and can be used to test many points concurrently.
In order to obtain the index of the polygon the point is inside of, use testPoint(float, float, BitSet)
x - the x coordinate of the point to testy - the y coordinate of the point to testtrue iff the point lies inside any polygon; false otherwisetestPoint(float, float, BitSet)public boolean testPoint(float x,
float y,
BitSet inPolys)
(x, y) lies inside any polygon stored in this PolygonsIntersection object.
This method is thread-safe and can be used to test many points concurrently.
x - the x coordinate of the point to testy - the y coordinate of the point to testinPolys - if not null then the i-th bit is set if the given point is inside the i-th polygontrue iff the point lies inside the polygon and not inside a hole; false otherwiseCopyright © 2015–2019 JOML. All rights reserved.