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
-
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 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:
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 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 notnull
then the i-th bit is set if the given point is inside the i-th polygon- Returns:
true
iff the point lies inside the polygon and not inside a hole;false
otherwise
-