Show HN: Various shape regularization algorithms(github.com)
github.com
Show HN: Various shape regularization algorithms
https://github.com/nickponline/shreg
6 comments
This is the thing I wished existed somewhere and didn’t know how to search for.
I’m a land surveyor, and another topic I’m interested in is automatic label (text) positioning around shapes, possible strategies, what works best, including design principles and how to keep it non-cluttered for the user.
I’m a land surveyor, and another topic I’m interested in is automatic label (text) positioning around shapes, possible strategies, what works best, including design principles and how to keep it non-cluttered for the user.
Hey, you've probably seen these already, but Redblobgames has a great series of posts about creating good labels for maps:
https://www.redblobgames.com/blog/2024-08-20-labels-on-maps/
https://www.redblobgames.com/blog/2024-10-09-sdf-curved-text...
(There's a few others too)
Polylabel is pretty great
https://github.com/mapbox/polylabel
https://github.com/mapbox/polylabel
thanks for the work, this looks amazing. Have you considered trying numba for acceleration? It's great for number crunching.
Really great, thank you!
[deleted]
That led me to shape regularization (a technique used in computational geometry to clean up geometric data). CGAL had implemented a few methods for that, but there are more ways to do it, which I thought were nice. Also I typically work in Python, so it was nice to have a pure Python library could handle this.
I struggled to get the first version working as a QP. At a high level most of these boil down to minimizing a cost A + B where A is the cost associated the geometry and goes up the more you move it, and B is the cost associated "niceness" or rather the constraints you impose, and goes down the more you impose them. Then you try and minimize A + B or rather HA + (1-H)B where H is a hyper-parameter that controls the relative importance of A and B.
I needed a Python implementation so started with the examples implemented in CGAL then added a couple more for snap and joint regularization and metric regularization.