## Calculating The Hex Positions

The other day, in an article on “Exporting My FT3 World Back To CC3”, I discussed the geometry of an icosahedron and how it can be broken up into 492 hexagons. Now it’s time to calculate the actual positions of those hexagons that we will need to create a world map.

Here is a sample icosahedral map (click image for full size map)

### Latitudes

There are 22 rows of hexes. Since the hexes are vertical (vertices on top and bottom), all the hexes in each row will be at the same latitude. From the center of the first row (the north pole) to the center of the last row (the south pole) is 180 degrees. So the difference in latitude between each row is 180/(22-1) or 8.571428571 degrees.

The map runs from -90 degrees (north pole) to +90 degrees (south pole). So we’ll start at -90 and add 180/21 degrees per row to get the latitude for each of the rows.

### Longitudes

Calculating longitudes is slightly more involved. To start, we need to count how many hexes are in each row. The first and last rows (the north and south poles) contain just one hex. In the top third of the map, rows 2-7 contain 5, 10, 15, 20, 25, and 30 hexes. The middle third of the map, rows 8-15, contain 35 hexes each. The bottom third of the map, rows 16-21, contain 30, 25, 20, 15, 10, and 5 hexes. By dividing 360 degrees by the number of hexes in a row we know the number of degrees between hexes in that row.

Next, we need to know the position of the first hex in each row. The map runs from -180 degrees (left side of map) to +180 degrees (right side of map). We’ll ignore the poles for the moment. Starting with the 2nd row, we can see that the edge of the left most hex is up against the left edge of the map (the -180 degree mark). Therefore, the center of that hex is offset by half the increment we determined in the last step (for row two this increment is 360/5). That means that the longitude for the first hex in row two is -180 + (360/5)/2 = -144 degrees. Continue adding the increment (72 degrees in the case of row 2) to each hex to find the longitude for the remaining hexes in that row.

Row three starts in the middle of a hex (you can see that the left most hex in row three is split at the left side of the map). Therefore, that hex’s longitude is -180 degrees. (No adjustment is needed). Add the increment, as before, to find the longitude of the remaining hexes in that row.

Each row thereafter continues to alternate between having its first hex offset half an increment or starting right at -180 degrees. This continues through the middle third of the map. At that point, you will notice that the triangle angles away from the left edge of the map. This is actually just a distortion caused by laying the triangles out in this manner. The edge of that triangle is actually the same longitudinal line that we have followed down the map to this point. Ignore the fact that it appears to angle away and treat it as the left edge of the map. Each of the hexes on that edge are centered on that edge and need not be adjusted for (they each have a longitude of -180 degrees).

Once you have the longitude of the first hex in each row, you need only add the increment for that row to find the longitudes of the remaining hexes in that row.

The north pole has coordinates of -90,0 while the south pole is at +90,0. The longitude doesn’t have any bearing on the location of the poles, but it does change the orientation. I have arbitrarily decided upon a longitude of 0 for my map.

Below is a table summing up these values.

Row | Latitude | Hexes / Row | Starting Longitude | Increment |
---|---|---|---|---|

1 | -90 | 1 | 0 | – |

2 | -81.4285714285714 | 5 | -144 | 72 |

3 | -72.8571428571429 | 10 | -180 | 36 |

4 | -64.2857142857143 | 15 | -168 | 24 |

5 | -55.7142857142857 | 20 | -180 | 18 |

6 | -47.1428571428571 | 25 | -172.8 | 14.4 |

7 | -38.5714285714286 | 30 | -180 | 12 |

8 | -30 | 35 | -174.857142857143 | 10.2857142857143 |

9 | -21.4285714285714 | 35 | -180 | 10.2857142857143 |

10 | -12.8571428571429 | 35 | -174.857142857143 | 10.2857142857143 |

11 | -4.28571428571429 | 35 | -180 | 10.2857142857143 |

12 | 4.28571428571429 | 35 | -174.857142857143 | 10.2857142857143 |

13 | 12.8571428571429 | 35 | -180 | 10.2857142857143 |

14 | 21.4285714285714 | 35 | -174.857142857143 | 10.2857142857143 |

15 | 30 | 35 | -180 | 10.2857142857143 |

16 | 38.5714285714286 | 30 | -180 | 12 |

17 | 47.1428571428571 | 25 | -180 | 14.4 |

18 | 55.7142857142857 | 20 | -180 | 18 |

19 | 64.2857142857143 | 15 | -180 | 24 |

20 | 72.8571428571429 | 10 | -180 | 36 |

21 | 81.4285714285714 | 5 | -180 | 72 |

22 | 90 | 1 | 0 | – |

[…] Another Edit: Here’s more detail on Calculating the Hex Positions. […]