AoiSampler#
- class AoiSampler[source]#
Bases:
object
Given a set of polygons representing the AOI, allows efficiently sampling points inside the AOI uniformly at random.
To achieve this, each polygon is first partitioned into triangles (triangulation). Then, to sample a single point, we first sample a triangle at random with probability proportional to its area and then sample a point within that triangle uniformly at random.
Methods
__init__
(polygons)polygon_to_graph
(polygon)Given a polygon, return its graph representation.
sample
([n])Sample a random point within the AOI, using the following algorithm:
triangle_area
(vertices, simplices)Calculate area of each triangle specified by the simplices array using Heron's formula.
triangle_origin_and_basis
(vertices, simplices)For each triangle ABC, return point A, vector AB, and vector AC.
triangle_side_lengths
(vertices, simplices)Calculate lengths of all 3 sides of each triangle specified by the simplices array.
triangulate
(polygons)triangulate_polygon
(polygon)Extract vertices and edges from the polygon (and its holes, if any) and pass them to the Triangle library for triangulation.
- polygon_to_graph(polygon: Union[Polygon, LinearRing]) Tuple[ndarray, ndarray] [source]#
Given a polygon, return its graph representation.
- Parameters
polygon (Union[Polygon, LinearRing]) – A polygon or polygon-exterior.
- Returns
An (N, 2) array of vertices and an (N, 2) array of indices to vertices representing edges.
- Return type
Tuple[np.ndarray, np.ndarray]
- sample(n: int = 1) ndarray [source]#
- Sample a random point within the AOI, using the following algorithm:
Randomly sample one triangle (ABC) with probability proportional
to its area. - Starting at A, travel a random distance along vectors AB and AC. - Return the final position.
- Parameters
n (int, optional) – Number of points to sample. Defaults to 1.
- Returns
(n, 2) 2D coordinates of the sampled points.
- Return type
np.ndarray
- triangle_area(vertices: ndarray, simplices: ndarray) ndarray [source]#
Calculate area of each triangle specified by the simplices array using Heron’s formula.
- Parameters
vertices (np.ndarray) – (N, 2) array of vertex coords in 2D.
simplices (np.ndarray) – (N, 3) array of indexes to entries in the vertices array. Each row represents one triangle.
- Returns
(N,) array of areas
- Return type
np.ndarray
- triangle_origin_and_basis(vertices: ndarray, simplices: ndarray) Tuple[ndarray, Tuple[ndarray, ndarray]] [source]#
For each triangle ABC, return point A, vector AB, and vector AC.
- Parameters
vertices (np.ndarray) – (N, 2) array of vertex coords in 2D.
simplices (np.ndarray) – (N, 3) array of indexes to entries in the vertices array. Each row represents one triangle.
- Returns
(point A, (vector AB, vector AC)).
- Return type
3 arrays of shape (N, 2), organized into tuples like so
- triangle_side_lengths(vertices: ndarray, simplices: ndarray) Tuple[ndarray, ndarray, ndarray] [source]#
Calculate lengths of all 3 sides of each triangle specified by the simplices array.
- Parameters
vertices (np.ndarray) – (N, 2) array of vertex coords in 2D.
simplices (np.ndarray) – (N, 3) array of indexes to entries in the vertices array. Each row represents one triangle.
- Returns
||AB||, ||BC||, ||AC||
- Return type
Tuple[np.ndarray, np.ndarray, np.ndarray]