Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

From Icosahedron to Base Cells. #701

Open
SkybuckFlying opened this issue Sep 22, 2022 · 5 comments
Open

From Icosahedron to Base Cells. #701

SkybuckFlying opened this issue Sep 22, 2022 · 5 comments

Comments

@SkybuckFlying
Copy link
Contributor

SkybuckFlying commented Sep 22, 2022

What I find weird about Uber H3 is how it starts with 122 base cells, 110 of which are hexagons and 12 of which are pentagons.

Then the documentation mentions it's based on "icosahedron" which has 12 vertices and 20 triangles.

Now what I understand so far is that each of these vertices is surrounded by a pentagon which would mean 12 pentagons x 5 triangles = 60 triangles.

However these pentagons would probably not fit onto the sphere, not sure though.

Then Uber H3 states base cells 110 hexagons and 12 pentagons, so the number of triangles here would be: 110x6 + 12x5 =
660 + 60 = 720 triangles.

Trying to reason back to 20 triangles, where each triangle could be subdivided into 4 triangles would give:
720 / 4 = 180 first pass

or when can also use a different approach to figure out how many triangles the original 20 need to be split up into:
720/20 = 36

The second one was my initial reasoning.

Dividing 36 by 4 again would give 9.

And then one is stuck with 9 triangles, which cannot be divided by 4 anymore, so that would be weird.

Trying 180 next:
180/4 = 45
Again one gets stuck.

So it's hard to understand how the icosahedron triangles are turned into pentagons and hexagon cells and also how these are ultimately covered by triangles. (Plus uber h3 does some extra, it apperently rotates them as well by 19.x something degrees).

Anyway failing to reconstruct it myself/the idea time for some googling:

https://stackoverflow.com/questions/42069420/hexagonal-tilling-of-hemi-sphere/42093868#42093868
which also leads to here:
https://stackoverflow.com/questions/42069420/hexagonal-tilling-of-hemi-sphere/42093868#42093868

So the first link has a somewhat surprising solution, I don't quite understand it yet, I have seen it in Uber H3 videos or papers from others where instead of subdividing the triangle into perfect other triangles, it more or less creates some kind of lines inside of the triangle.

I think this is what Uber H3 is doing.

However on the math part, how does uber h3 go from 12 vertices + 20 triangles for icosahedron to 122 base cells ?

How many vertices does the resolution 0 contain ?

There are some formulas here:

https://h3geo.org/docs/core-library/restable

But they seem to start after the distribution has already taken place,. and it starts from resolution 0/base cells.

What is undocumented is how it gets from a icosahedron to the base cells.

I think this would be helpfull to understand Uber H3 better, especially when having to verify verteces on the sphere.

I also wonder if the rotating per resolution that Uber H3 does is necessary, or if a non-rotated version would also be interesting and if it's possible.

It might be easier to understand if it's not rotated. Perhaps if possible an option can be build into Uber H3 so that it doesn't rotate (?)

@isaacbrodsky
Copy link
Collaborator

The process of indexing from lat,lng to cell (hex) ID has some documentation in the internals section of the website: https://h3geo.org/docs/core-library/latLngToCellDesc The layout of each icosahedron face is shown in https://h3geo.org/docs/core-library/coordsystems#faceijk-coordinates

You may want to look at a rendering of the worldwide H3 grid, such as at the top of this post: https://www.uber.com/blog/h3/ Sadly that does not have the icosahedron edges overlaid on it too, but each of the 12 icosahedron vertexex is located at the center of each pentagon shown there.

@nrabinowitz
Copy link
Collaborator

This is the visual aid I always use, possibly we should include this in the docs:

image

@nrabinowitz
Copy link
Collaborator

Each face is split into:

  • 4 base cells
  • 3 half base cells, where the other half is on the neighboring face
  • 3 fifths of a pentagon, where the other 4 fifths are provided by the other faces that share the vertex

@SkybuckFlying
Copy link
Contributor Author

Yes, including these pictures into the official documentation would clearify how these hexagons are layed on top of the icosahedron faces. As well as the textual description you gave next.

Especially the third picture is clearifying, I would also recommend adding some further information to clearly explain that this is indeed at resolution 0, at least that is what I think it is.

Bonus would be how to mathematically or table-wise or algorithmetically reconstruct it :)

@sahrk
Copy link

sahrk commented Nov 30, 2023

However on the math part, how does uber h3 go from 12 vertices + 20 triangles for icosahedron to 122 base cells ?
,,,
What is undocumented is how it gets from a icosahedron to the base cells.

Note that in addition to the 7-fold per resolution enhancement ("aperture 7") used in the indexed H3 resolutions, the theory of hexagonal discrete global grids also uses aperture 4 and aperture 3 enhancements.

Screenshot 2023-11-29 at 6 24 04 PM

Begin with 12 pentagons centered on the vertices of the icosahedron (these do tile the sphere; they form a dodecahedron, which is the dual of an icosahedron). Then perform a single aperture 3 and a single aperture 4 enhancement. That gives you the 122 base cells.

I also wonder if the rotating per resolution that Uber H3 does is necessary, or if a non-rotated version would also be interesting and if it's possible.

It might be easier to understand if it's not rotated. Perhaps if possible an option can be build into Uber H3 so that it doesn't rotate (?)

The rotation is necessary in aperture 7 to maintain the cell center points as the resolution increases (a "central place" grid). You could construct a central place grid that maintained the same orientation across all resolutions using just aperture 4. One such grid is the ISEA4H grid available in DGGRID). But that was not the aperture we chose.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants