web-dev-qa-db-fra.com

Couvrant la Terre avec des tuiles de carte hexagonales

Beaucoup de jeux de stratégie utilisent des tuiles hexagonales. L'un des principaux avantages est que la distance entre le centre d'une tuile et toutes les tuiles voisines est la même.

Je me demandais si quelqu'un envisageait d'associer un système de tuiles hexagonal au système géographique traditionnel (longitude/latitude). Je pense qu'il serait intéressant de couvrir un globe avec des tuiles hexagonales et de pouvoir mapper une coordonnée géographique sur une tuile.

Quelqu'un a-t-il déjà vu quelque chose de proche de cela?

METTRE À JOUR

Je cherche un moyen de subdiviser la surface d'une sphère de manière à ce que chaque division ait la même surface. Idéalement, les centres des sous-divisions adjacentes seraient équidistants.

55
carrier

Jetez un oeil à (vraid/earthgen } _; il utilise des hexagones (plus quelques pentagones) et inclut le code source (voir planet/grid/create_grid.cpp ).

À compter de 2018, une une nouvelle version est disponible basée sur la raquette.

vraid/earthgen image

29
amitp

Eh bien, beaucoup de gens ont fait valoir qu'il était impossible de recouvrir la sphère de carreaux hexagonaux - vous vous demandez peut-être pourquoi.

Euler a déclaré (et il y a beaucoup de preuves intéressantes et différentes, et même un livre entier) que pour une mosaïque de la sphère dans x Polygones avec y Bords total et z sommets total (par exemple, un cube a 6 8 sommets) la formule 

x - y + z = 2

tient toujours (attention le signe moins).

(BTW: c'est une déclaration topologique, donc un cube et une sphère - ou, pour être précis, seulement leur bordure - est vraiment la même chose ici)

Si vous voulez utiliser uniquement des hexagones pour paver une sphère, vous obtenez x hexagones, ayant 6 * x bords. Cependant, un bord est partagé par chaque paire d'hexagones. Donc, nous voulons seulement compter 3 * x d'entre eux et 6 * x sommets mais, encore une fois, chacun d'entre eux est partagé par 3 hexagones de sorte que vous vous retrouvez avec 2 * x bords.

Maintenant, en utilisant la formule: 

x - 3 * x + 2 * x = 2

vous vous retrouvez avec la fausse déclaration 0 = 2 - vous ne pouvez donc pas utiliser uniquement des hexagones.

C’est la raison pour laquelle le ballon de football classique ressemble à celui-ci. Bien sûr, les ballons modernes sont plus sophistiqués, mais l’essentiel reste.

19
Carsten

Il est impossible de recouvrir une sphère avec des mosaïques régulières (sauf pour les "tranches orange" longues et minces. Le moyen optimal de pixelliser une carte, compte tenu de certaines contraintes ou exigences, est en réalité un problème de recherche assez difficile. 

Une sorte de mosaïque très utilisée (en astrophysique) est la pixelisation HEALPIX: http://healpix.sourceforge.net/

Cette pixellisation satisfait à l'exigence d'égalité de surface; il est impossible de tout faire à égale distance, cependant.

Une autre pixellisation est "GLESP", qui a des propriétés différentes (et n’est pas aussi perfectionné qu’un progiciel): http://www.glesp.nbi.dk/

18
Andrew Jaffe

Le premier site Web qui me vient à l’esprit est Informations de programmation de jeux d’Amit et sa collection de liens sur des grilles hexagonales.

16
Michael Kristofik

Vous ne pouvez pas couvrir une sphère avec des hexagones égaux, mais vous pouvez le couvrir avec une géodésique, qui est principalement des hexagones, avec 12 pentagones aux sommets d’un icosohèdre et les hexagones légèrement déformés pour le faire gonfler en sphère.

11
GoatRider

Lire "Systèmes de grille mondiaux discrets géodésiques" de Kevin Sahr, Denis White et A. Jon Kimerling

Vous pouvez le trouver ici ...

11
Sphaerica

Les tuiles hexagonales sont trop compliquées pour une géométrie normale telle qu’elle s’applique à des utilisations géospatiales . Regardez HTM pour un objet similaire avec des triangles ou google pour "Treillis triangulaire hiérarchique" pour d’autres sources.

9
Erich Mirabal

L'ancien jeu de rôle Traveler utilisait pour cartographier les surfaces de la planète sous forme d'icosahédres (découpés pour être imprimés dans un livre). Cela produisit une grosse distorsion aux coins des hexs (ils devaient devenir des pentagones). Vous pourriez trouver du matériel de ce type lors de la recherche de GURPS Traveler.

4
Svante

Il est difficile de diviser une sphère en parties égales avec des surfaces plates. Pour cette raison, vous vous retrouvez avec Formes géodésiques , qui sont not composées de formes pouvant à leur tour être composées de triangles de taille égale. En décomposant tous les hexagones et les pentagones en triangles, vous vous retrouvez avec des triangles d'angles intérieurs différents, ce qui entraîne une perte de symétrie.

La seule consolation que je puisse vous donner est que toutes les formes auront un nombre limité de triangles qui peuvent être catégorisés, ce qui signifie que pour une petite géodésique, 5 ou 6 triangles peuvent être utilisés de manière répétée pour décrire tous des hexagones et des pentagones nécessaires à la géodésique. Bien que les distances ne soient pas égales à partir du "centre" de chaque triangle/forme, vous pouvez au moins diviser le traitement de chaque triangle en un cas discret, ce qui donne un potentiel de contournement dans le code.

4
Avery Payne

Seuls quelques polyèdres platoniques utilisent un seul type de polygone pour se rapprocher d'une sphère. Célèbre le ICOSAHEDRON et le DODECAHEDRON . Si vous êtes prêt à avoir un peu de distorsion et quelques points qui se chevauchent, vous pouvez obtenir des résultats corrects qui rendraient le jeu amusant. Essayez THIS LINK , qui parvient à avoir une surface presque égale pour toutes les mosaïques et des distances de mosaïque assez cohérentes pour les cercles du monde entier. 

Cependant, aucune de celles-ci ne cartographie très facilement le bon vieux système de projection géographique longitudinale/cylindrique.

Une solution consiste simplement à superposer un motif en nid d'abeille sur la carte de projection ÉQUIRECTANGULAIRE et à autoriser TONNES de distorsion à l'approche des pôles LIKE THIS .

Bonne chance dans vos recherches! :)

3
jaya

HEAlpix est le bon choix si votre contrainte est de garder une surface égale pour diviser la sphère en plusieurs morceaux (intéressant pour couvrir la surface projetée dans le ciel de la même manière dans les pôles et dans la région de l’équateur). En gros, vous divisez votre sphère en 4 à chaque fois en suivant un schéma en anneau ou imbriqué pour répondre à la contrainte de zone égale hiérarchique. Il est également très pratique de "déployer" des fonctions FT (propriété (iso-latitude)) dans le ciel, par exemple pour étudier la température des modes CMB dans les missions Planck ou WMAP. 

Il est également implémenté dans de nombreux langages de programmation.

De plus, je devrais en mentionner un autre (non égal à la surface), appelé Q3C pour 'Quad Tree Cube', un autre schéma de partitionnement du ciel qui présente d'autres avantages (recherche par cône et correspondance x).

papier original: 

http: // adsabs.harvard.edu/abs/2006ASPC..351..735K

1
pepestar

Je viens de construire un package R appelé dggridR qui divise la surface de la Terre en hexagones de taille égale aux fins de l'analyse spatiale binned.

Carsten rend ce son impossible dans sa réponse, mais pratiquement, ce n'est pas le cas. En introduisant 12 pentagones, tous les autres hexagones s'emboîtent sans problème. Comme vous pouvez avoir des millions et des millions de cellules pour une grille hautement résolue, vous pouvez oublier ces pentagones la plupart du temps.

Les maths de la transformation sont compliqués. Vous pouvez les trouver dans:

  • Crider, John E. «Équations exactes pour la projection cartographique de Fuller et l’inverse.» Cartographica: revue internationale de l’information géographique et de la géovisualisation 43.1 (2008): 67–72. Web.

  • Snyder, John P. «Une projection cartographique de zones égales pour des globes polyhédrales.» Cartographica: Revue internationale de l'information géographique et de la géovisualisation 29.1 (1992): 10–21. Web.

En arrière-plan, dggridR s’appuie sur le logiciel DGGRID de Kevin Sahr.

Vous pouvez également trouver les références suivantes utiles:

  • Gregory, Matthew J. et al. «Comparaison des métriques intercellulaires sur des systèmes de grille globaux discrets.» Ordinateurs, environnement et systèmes urbains 32.3 (2008): 188-203. CrossRef. Web.
  • Kimerling, Jon A. et al. «Comparaison des propriétés géométriques des réseaux mondiaux». Cartographie et sciences de l'information géographique 26.4 (1999): 271–288. Impression.
  • Sahr, K. «Systèmes de GRID mondiaux discrets hexagonaux pour l'informatique géospatiale». Archiwum Fotogrametrii, Kartografii i Teledetekcji Vol. 22 (2011): 363–376. Impression.
  • Sahr, Kevin. «Codage de localisation sur des grilles globales discrètes de type Hexagone à l'ouverture icosahedral 3». Ordinateurs, environnement et systèmes urbains 32.3 (2008): 174–187. CrossRef. Web.
  • Sahr, Kevin, Denis White et A. Jon Kimerling. «Systèmes de réseaux mondiaux géodésiques discrets». Cartographie et science de l'information géographique 30.2 (2003): 121–134. Impression.
1
Richard

Ancienne question, mais:

Les autres réponses sont correctes en ce qu'il est impossible de paver une sphère en utilisant uniquement des hexagones.

Cependant, un simple (ish) hack est:

Créez une "feuille" d'hexagones en 2D:

 enter image description here

et les décaler de 1 dans l'espace 3D de l'Origine. Puis, normalisez tous les sommets.

Cela vous donnera une version "bombée" de la feuille qui présente une courbe sphérique de Nice. Le problème est que cela ne fonctionnera que si la feuille couvre une partie de la sphère. 

Une solution est similaire à celle utilisée pour créer un sol en grille infinie. Lorsque la sphère tourne, lorsque vous avez déplacé une demi-cellule, faites-la pivoter vers l'arrière une fois dans la direction correspondante. (Dans le cas des hexagones, les nombres ne sont pas vraiment une demi-cellule, mais sont liés aux dimensions d'une tuile hexagonale.) C'est un peu délicat en 3D, mais c'est faisable.

Il y a quelque temps, j'avais une question similaire en 2D qui pourrait être utile.

https://gamedev.stackexchange.com/questions/70092/infinite-treadmilling-hexagonal-grid/70341#70341

0
3Dave