Class PolygonsIntersection
- java.lang.Object
-
- org.joml.PolygonsIntersection
-
public class PolygonsIntersection extends java.lang.ObjectClass for polygon/point intersection tests when testing many points against one or many static concave or convex, simple polygons.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 Modifier and Type Field Description protected float[]verticesXY
-
Constructor Summary
Constructors Constructor Description PolygonsIntersection(float[] verticesXY, int[] polygons, int count)Create a newPolygonsIntersectionobject with the given polygon vertices.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleantestPoint(float x, float y)Test whether the given point(x, y)lies inside any polygon stored in thisPolygonsIntersectionobject.booleantestPoint(float x, float y, java.util.BitSet inPolys)Test whether the given point(x, y)lies inside any polygon stored in thisPolygonsIntersectionobject.
-
-
-
Constructor Detail
-
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 Detail
-
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(float, float, BitSet)
-
testPoint
public boolean testPoint(float x, float y, java.util.BitSet inPolys)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
-
-