Awesome
hxGeomAlgo
Small collection of computational geometry algorithms in Haxe.
Marching Squares (Contour Tracing)
Based on:
- https://web.archive.org/web/20180316055432/http://devblog.phillipspiess.com/better%20know%20an%20algorithm/2010/02/23/better-know-marching-squares.html (C# - by Phil Spiess)
- http://www.tomgibara.com/computer-vision/marching-squares (Java - by Tom Gibara)
Ramer-Douglas-Peucker (Polyline Simplification)
Based on:
- http://karthaus.nl/rdp/ (JS - by Marius Karthaus)
- http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment (JS - by Grumdrig)
Ear Clipping (Triangulation and Poly Decomposition w/ Hole Support)
Based on:
- https://github.com/mapbox/earcut (JS - by Vladimir Agafonkin)
- http://www.ewjordan.com/earClip/ (Java - by Eric Jordan)
Bayazit (Poly Decomposition)
Based on:
- https://web.archive.org/web/20140701210122/http://mnbayazit.com/406/bayazit (C - by Mark Bayazit)
- http://www.dyn4j.org/ (Java - by William Bittle)
Visibility Polygon and Homogeneous Coords (2D)
Based on:
- http://www.cs.ubc.ca/~snoeyink/demos/convdecomp/VPDemo.html (Java - by Jack Snoeyink)
Snoeyink-Keil (Minimum Convex Decomposition)
Based on:
- http://www.cs.ubc.ca/~snoeyink/demos/convdecomp/MCDDemo.html (Java - by Jack Snoeyink & Mark Keil)
- J. Mark Keil, Jack Snoeyink: On the Time Bound for Convex Decomposition of Simple Polygons. Int. J. Comput. Geometry Appl. 12(3): 181-192 (2002)
Connected Components Labeling and Contour Tracing (w/ Hole Support)
Based on:
- Fu Chang, Chun-jen Chen, Chi-jen Lu: A linear-time component-labeling algorithm using contour tracing technique (2004)
Visvalingam-Whyatt (Polyline Simplification)
Based on:
- Visvalingam M., Whyatt J. D.: Line generalisation by repeated elimination of the smallest area (1992)
- http://bost.ocks.org/mike/simplify/ (JS - by Mike Bostock)
- https://github.com/jonasmalacofilho/dheap (Haxe - by Jonas Malaco Filho)
- http://en.wikipedia.org/wiki/Binary_heap (Binary (Min)Heap)
Tess2 (Tesselation to Triangles and Convex Polygons, Poly Boolean Ops)
Based on:
- GLU Libtess (by Eric Veach, July 1994)
- tess2.js (JS - by Mikko Mononen, Aug 2013)
IsoContours (Contour Tracing)
Based on:
- http://en.wikipedia.org/wiki/Marching_squares
- https://github.com/deltaluca/nape (Haxe - by Luca Deltodesco)
- https://github.com/scikit-image/scikit-image (Python - by scikit-image team)
Hertel-Mehlhorn (Convex Polygons from Arbitrary Triangulation)
Based on:
- https://github.com/ivanfratric/polypartition (CPP - by Ivan Fratric)
- https://web.archive.org/web/20140102033642/http://www.philvaz.com/compgeom/ (by Phil Porvaznik)
Chaikin (Recursive Curve Smoothing)
Based on:
- George Merrill Chaikin: An algorithm for high-speed curve generation (1974)
- https://sighack.com/post/chaikin-curves (Java - by Manohar Vanga)
Wu-Yong-Zhang-Zhang (Multi-step Chaikin Curve Smoothing)
Based on:
- Ling Wu, Jun-Hai Yong, You-Wei Zhang, and Li Zhang: Multi-step Subdivision Algorithm for Chaikin Curves (2004)
- http://win.doomitalia.it/varie/chaikin.pdf (Matlab - by Fabio Roman, 2009)
Dependencies
The only dependency is hxPixels, and only for the algorithms needing access to pixels.
Usage
Code is extensively doc-commented, and I tried my best to make it easy/intuitive to use. You can also take a look at the demo for a quick overview on how to use the different classes.
Credits
hxGeomAlgo is based on the work of many developers and it wouldn't exist if it weren't for them. See the CREDITS file for details.
License
hxGeomAlgo is developed by Giuseppe Di Mauro (azrafe7) and released under the MIT license (except for Tess2.hx
, which is licensed under SGI B 2.0). See the LICENSE file for details.