Hacker News new | ask | show | jobs
by dxbydt 5037 days ago
Regarding implementation, he says "All the algorithms are straightforward. How might you implement them? You’ll first want to choose data structures for each of the three coordinate systems. I recommend keeping it very simple and transparent. All the coordinate systems I listed have an integer u and an integer v, and some of them have an annotation like L or W ; in Java use a class with public fields; The next step is to implement the algorithms you need. The simplest thing to do is to write functions (or methods) that take A and return a list of B. "

Atleast in Java ( and therefore in Scala, Clojure etc), the data-structure of choice is a general path, and all of those algorithms have built-in implementations, mostly on Path2D or other concretes. Also, instead of dealing with squares, hexagons & triangles separately... a square is just 2 isosceles triangles, and a hex is 6 equilateral triangles. So if you have a Triangle2D class extending Path2D, you get all of the algorithms and the you can handle all 3 face types. The transformation between cooordinate systems is handled by affine transforms

Path2D: http://docs.oracle.com/javase/6/docs/api/java/awt/geom/Path2...

AffineTransform: http://docs.oracle.com/javase/6/docs/api/java/awt/geom/Affin...