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 coordinate of the search point. This algorithm additionally also supports multiple polygons.
This class is threadsafe 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

Constructor Summary
ConstructorDescriptionPolygonsIntersection
(float[] verticesXY, int[] polygons, int count) Create a newPolygonsIntersection
object with the given polygon vertices. 
Method Summary
Modifier and TypeMethodDescriptionboolean
testPoint
(float x, float y) Test whether the given point(x, y)
lies inside any polygon stored in thisPolygonsIntersection
object.boolean
Test whether the given point(x, y)
lies inside any polygon stored in thisPolygonsIntersection
object.

Field Details

verticesXY
protected final float[] verticesXY


Constructor Details

PolygonsIntersection
public PolygonsIntersection(float[] verticesXY, int[] polygons, int count) Create a newPolygonsIntersection
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. 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 theverticesXY
array, 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 thisPolygonsIntersection
object.This method is threadsafe 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:
true
iff the point lies inside any polygon;false
otherwise See Also:

testPoint
Test whether the given point(x, y)
lies inside any polygon stored in thisPolygonsIntersection
object.This method is threadsafe 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 notnull
then the ith bit is set if the given point is inside the ith polygon Returns:
true
iff the point lies inside the polygon and not inside a hole;false
otherwise
