(Arne Babenhauserheide)
2014-06-26: start with pos2cel start with pos2cel
diff --git a/examples/d20world.w b/examples/d20world.w
--- a/examples/d20world.w
+++ b/examples/d20world.w
@@ -189,7 +189,24 @@ define φ : * (/ 1 2) : 1+ : sqrt 5
define : latlon2cellidx lat lon
. "Convert a position given as latitude and longitude into the correct cell index."
- . #t
+ ; cell 1 (index 0) is on top, cell 20 at the bottom. The right
+ ; border of cell 2 is situated at longitude 0. With that, the
+ ; left corner of cell 19 is at longitude 180. Top and bottom
+ ; are point-symmetric. We can cleanly divide the upper part of
+ ; the icosaeder into 3 regions by longitude. Let's do that.
+ let*
+ : upper : > lat 0
+ ; we start by switching to a symmetric longitude
+ slon : if upper lon : + lon 180
+ ; the sector number is defined by the uppermost triangle
+ ; in it.
+ sector : if (< slon 120) 4 (if (< slon 270) 3 2)
+ ; we start by calculating the fraction inside the sector
+ lonsectorfraction : modulo slon 120
+ ; we can further subdivide the sector by longitude into two subsectors
+ subseclon : if (< lon 60) lon (-120 lon)
+ ; TODO find some more symmetry or start nontrivial geometry.
+ . #t
display : d20-as-text world