simplify a pslg with iterated snap rounding
Project description
snap_pslg
Refine a planar straight-line graph with iterated snap rounding.
- floor all points to integer coordinates
- eliminate edge intersections and t-junctions
- if allowed to converge, no point will be within .5 units of an edge. You can remove this constraint entirely, maintaing more of the input shape at the cost of near t-junctions, by setting max_iterations to 0.
This will slightly distort the pslg, but the result will be ready for triangulation and other algorithms.
install
pip install snap_pslg
signature
Vec2 = Annotated[Iterable[float], "2D vector"]
def snap_round_pslg(
points: Iterable[Vec2], edges: Iterable[tuple[int, int]], max_iterations: int = 100
) -> tuple[list[IntPoint], list[tuple[int, int]]]:
"""Perform one iteration of snap rounding.
:param points: A list of 2D points
:param edges: A list of edges, each a pair of indices into points
:param max_iterations: optionally limit number of iterations to perform. By
default, will try 100 iterations to reach convergence.
:return: A list of 2D points, a list of edges, each a pair of indices into points
Some of the points may not have indices. That is fine.
"""
usage
from snap_pslg import snap_round_pslg
points = [(0, 0), (3, 0), (3, 3), (0, 3), (5, 5)]
edges = [(0, 2), (1, 3)]
# You might have noticed that point (5, 5) was never used. This is fine. It
# will be retained as a point and any line segments that pass very close to it
# will be routed through it.
new_points, new_segments = snap_round_pslg(points, edges)
new_points # [(0, 0), (5, 5), (3, 3), (2, 2), (0, 3), (3, 0)]
new_edges # [(0, 3), (4, 3), (3, 2), (3, 5)]
# a new point, (3, 3) has been added at the segment intersection
# each segment is broken into two pieces
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
snap_pslg-0.2.0.tar.gz
(10.5 kB
view hashes)
Built Distribution
snap_pslg-0.2.0-py3-none-any.whl
(11.9 kB
view hashes)
Close
Hashes for snap_pslg-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a8fb17d2259301f6d9970c12316fe598e1c87b7db724f04d6f859008c11ba36 |
|
MD5 | c9c9c9a2e398959f8e020a4bd4f61cb4 |
|
BLAKE2b-256 | edca56443c3c2ec58abdebf67b995ebf484a48a41cfd322e43a77b51f626c73c |