Class PolygonsIntersection
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
- Author:
- Kai Burjack
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionPolygonsIntersection(float[] verticesXY, int[] polygons, int count) Create a newPolygonsIntersectionobject with the given polygon vertices. -
Method Summary
Modifier and TypeMethodDescriptionbooleantestPoint(float x, float y) Test whether the given point(x, y)lies inside any polygon stored in thisPolygonsIntersectionobject.booleanTest whether the given point(x, y)lies inside any polygon stored in thisPolygonsIntersectionobject.
-
Field Details
-
verticesXY
protected final float[] verticesXY
-
-
Constructor Details
-
PolygonsIntersection
public PolygonsIntersection(float[] verticesXY, int[] polygons, int count) Create a newPolygonsIntersectionobject with the given polygon vertices.The
verticesXYarray 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.- Parameters:
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 theverticesXYarray, staring with index 0
-
-
Method Details
-
testPoint
public boolean testPoint(float x, float y) Test whether the given point(x, y)lies inside any polygon stored in thisPolygonsIntersectionobject.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)- Parameters:
x- the x coordinate of the point to testy- the y coordinate of the point to test- Returns:
trueiff the point lies inside any polygon;falseotherwise- See Also:
-
testPoint
Test whether the given point(x, y)lies inside any polygon stored in thisPolygonsIntersectionobject.This method is thread-safe and can be used to test many points concurrently.
- Parameters:
x- the x coordinate of the point to testy- the y coordinate of the point to testinPolys- if notnullthen the i-th bit is set if the given point is inside the i-th polygon- Returns:
trueiff the point lies inside the polygon and not inside a hole;falseotherwise
-