Lorsque vous cartographiez la surface d'une sphère avec des tuiles, comment pourriez-vous gérer la distorsion polaire?

24

Il est facile de gérer la façon dont les emplacements interagissent sur une grille cartésienne propre. C'est juste des maths vanillées. Et vous pouvez en quelque sorte ignorer la géométrie de la surface de la sphère pour un tas si vous voulez simplement tronquer les pôles ou quelque chose. Mais je continue de proposer des idées de jeux où l'espace polaire compte. ARG géocodés et roguelikes mondiaux et autres.

Je veux des emplacements carrés (ish?) - raisonnablement représentables par des tuiles carrées de la même taille à travers le monde, de toute façon.

Cela doit être un problème résolu, non?

Quelles sont les solutions?

ETA:

À l'équateur - et en supposant que vos emplacements carrés sont raisonnablement petits, il est assez proche de vrai que vous pouvez vous en sortir en ayant un carré dans les rangées nord et sud de la rangée la plus équatoriale. Et vous pourriez probablement vous en tirer en agitant simplement la différence à la main jusqu'à 45 degrés environ. Mais finalement, vous devez avoir moins de carrés dans une rangée circonférentielle de pôle. Si je réduis la longueur de la ligne d'une unité et que je décale les carrés de 1/2, ils sont comme des hexagones et il est relativement facile de faire le codage pour garder une trace des connexions. Mais à mesure que vous vous éloignez, cela devient de plus en plus extrême.

Projeter la surface du monde sur la surface d'un cube est tentant. Mais je me suis dit qu'il devait déjà y avoir des solutions plus élégantes.

Si j'ai fait le cube (sans le disséquer davantage par géodésie), y a-t-il des avantages et des inconvénients à placer le pôle au centre d'une face ou au sommet de trois côtés?

clweeks
la source
1
Pourriez-vous préciser ce que vous entendez par «carré (ish)»? Comment carré est "carré (ish)"?
Steve H

Réponses:

3

Je pense que vous cherchez une grille géodésique . Beaucoup de gens se rapprochent de la terre avec un cube:

La plupart des problèmes cartographiques disparaîtraient sur une Terre polyédrique

Carlos A. Furuti a beaucoup de cartes de la terre qui se replient en cube

Vous pouvez également être intéressé par la projection quinconciale The Peirce qui cartographie la Terre entière sur un ou deux carrés.

L'icosaèdre (carte Dymaxion; "Quelle est la meilleure façon de pixeliser une sphère?" ) Donne un peu moins de distorsion, mais est plus compliqué.

David Cary
la source
9

J'ai toujours voulu voir un jeu où la carte sphérique utilisait un polyèdre ordinaire d'une certaine sorte au lieu de jouer le monde sur un tore. Cette technique est appelée carte Dymaxion . (source: grunch.net )texte alternatif         

Je recommanderais un icosaèdre . Plop le triangle actuel afin qu'il soit aligné sur un bord d'un carré. Lorsque le joueur quitte le triangle, remontez le triangle suivant et mappez-le de nouveau à l'identique. Les coordonnées du joueur seraient alors remappées dans la nouvelle section. Ainsi, chaque section de votre carte a son propre système de coordonnées. Vous devrez également dessiner l'arrière-plan des 3 sections adjacentes et 9 semi-adjacentes. Je ne pense pas que l'utilisateur serait en mesure de déterminer comment il est mis en œuvre s'il est bien fait.

Voici un exemple de la façon dont cela pourrait fonctionner.

Bien sûr, après avoir lu ceci, vous utiliserez probablement la carte torus classique et j'attendrai de voir un véritable univers polyédrique.

deft_code
la source
Je n'utiliserai pas de tore. Je pourrais utiliser un cylindre comme le font les jeux Civ. Mais, étant donné le manque de solutions brillantes, je penche sérieusement vers un cube. Un cube est un polyèdre! :)
clweeks
5

Si vous créez une sphère à l'aide d'une base géodésique, la zone polaire n'est pas traitée différemment de toute autre région en termes d'espacement des sommets, ce qui facilite la cartographie uv uniforme.

La plupart des applications de modélisation vous permettent de créer une sphère primitive à l'aide d'une conception géodésique.

Steve H
la source
Le problème est que vous obtiendrez des diamants au lieu de carrés dans ce cas, et ce n'est pas ce que le PO voulait.
Kornel Kisielewicz
À moins que je manque quelque chose, cela ne me donne pas des régions plus faciles à coordonner, à cartographier et à relier ... n'est-ce pas?
clweeks
La géodésique semble être la voie à suivre pour moi, je ne peux penser à aucune autre option de subdivision régulière. Si vous avez vraiment besoin de régions carrées, vous pouvez sûrement générer une région carrée, centrée sur le centre du triangle, même si elle chevauche d'autres carreaux. Pour les sphères suffisamment grandes (et les triangles suffisamment petits), le décalage entre les régions carrées et les faces triangulaires adjacentes sera négligeable. Cela devrait conserver l'avantage de pouvoir décrire les interactions locales (c'est-à-dire le même carré) dans le même système de coordonnées, non?
MrCranky
Je pense qu'il y a des formes géodésiques qui peuvent donner des carrés approximatifs si VRAIMENT nécessaires.
speeder
Vous obtenez des diamants au lieu de carrés, mais cela devrait être assez facile de faire une transformation pour le corriger. Aucun poteau garanti.
ChrisE
5

Il n'y a aucun moyen de "mapper" une sphère avec des carrés (ou des rectangles) et de les faire tous se rejoindre à des sommets "communs".

Cependant, serait-il possible de générer la "vision locale" à la demande? L'espace problématique n'est pas vraiment indiqué dans la question, mais si je travaillais sur quelque chose où je voulais une vue sur la ville mais qui voulait pouvoir faire tourner le monde, je pourrais temporairement mapper une grille sur une section "assez plate" de le monde. L'origine de la grille serait là où se trouvait votre centre local, et la normale à ce point correspond à la normale de la surface de la planète.

Ensuite, quand on sort du réseau, un nouveau est généré à la demande.

Cela peut ou non fonctionner pour le PO, mais pour certains, cela peut être utile.

dash-tom-bang
la source
4

Prenez un cube, la distance entre les sommets et le centre du cube étant égale au rayon souhaité. Vous avez une sphère composée de 6 quads.

Maintenant, à chaque étape, prenez chaque quadruple, divisez-le en 4 et déplacez les 5 nouveaux sommets (un au centre et 4 sur les bords - attention, ils sont PARTAGÉS) loin du centre afin qu'ils aiment sur le désir rayon.

Non, cette méthode n'est pas parfaite, mais au moins c'est une distribution plus ou moins égale sur la sphère.

Kornel Kisielewicz
la source
3
La distorsion est en fait assez grave avec cela - les quads au milieu du visage seront presque carrés et ceux près des coins seront fortement déformés.
JasonD
@JasonD: Ce sera toujours mieux que tous les diamants. Suggérez une solution moins déformée si vous souhaitez voter contre.
Kornel Kisielewicz
Eh bien, vous pouvez approximer une sphère assez bien avec la division géodésique, mais je ne suis pas sûr de voir comment cela m'aide.
clweeks
1

Avec le dymaxion max, vous avez des hexagones disposés en triangles sur une surface plane, mais comme la carte n'est pas vraiment plate, ce sont des pentagones. Si vous souhaitez permettre au joueur de conserver son orientation lorsqu'il parcourt certaines parties, vous devrez séparer les cartes de localisation de la façon dont elles sont réellement stockées. Pour des choses comme les bâtiments, vous pouvez stocker une petite carte de vecteurs rectangulaires, puis faire un travail difficile de les dessiner dans l'orientation que vous souhaitez.

Vous n'auriez pas besoin de toujours faire ressembler l'intérieur à un récent tremblement de terre, car je pense que le joueur moyen ne devrait même pas se soucier d'entrer dans une porte au nord-est mais d'entrer dans un écran avec la porte d'entrée orientée en raison sud et l'ensemble du bâtiment sur une grille régulière.

Bien que si vous allez simplement stocker des bâtiments et des sites importants comme ça, vous avez quand même fait tout le travail pour un modèle de football. Le résultat final est que vous stockez le monde sous forme de motif non carré, puis le forcez dans une telle grille où que se trouve le joueur.

Il y a une autre alternative cependant - si vous ne leur donnez pas une indication aussi précise de la sphère, comme si vous leur donniez juste une boussole de faible précision pour leur dire laquelle des quatre directions orthogonales était la plus proche du nord, alors vous pourriez vous éloigner avec juste faire des rotations à 90 degrés pour n'importe quel endroit où le joueur est allé. Compte tenu du niveau graphique supposé, ce n'est pas comme si vous deviez vous soucier d'un grand bâtiment obscurcissant une porte. Tant qu'ils savaient s'ils étaient près des pôles ou non, ils ne devraient pas être trop contrariés par le changement de boussole sur eux, à moins que les PNJ autour d'eux ne leur disent de se diriger vers le nord-est ou qu'ils essaient réellement de se rendre à des coordonnées de latitude et de longitude spécifiques .


la source
1

Vous posez une question que les gens qui font des cartes se posent depuis longtemps :)

Allez certainement lire sur Map Projections pour obtenir des idées et des idées qui pourraient vous aider. Le défi de représenter la surface d'une sphère sur / avec un plan 2D plat est une chose à laquelle les gens réfléchissent depuis longtemps.

En bref, non, vous ne pouvez pas le faire. C'est pourquoi lorsque vous regardez des cartes du monde, certaines parties sont déformées et d'autres non. Habituellement, ce sont les pôles, car la plupart des cartes concernent des zones non polaires.

Comme d'autres réponses l'ont dit, la réponse est soit d'utiliser une forme différente (hexagones ou triangles par exemple), soit de générer dynamiquement votre carte à la volée pour le point de vue actuel de l'utilisateur.

Les tuiles carrées sont assez faciles à gérer, sans aucun doute, mais je ne pense pas que créer une carte hexadécimale de carrelage soit si difficile.

Voici un ancien article de GameDev.net que vous pourriez trouver utile. Il s'agit de faire des tuiles isométriques et hexagonales sur une grille.

http://www.gamedev.net/reference/articles/article747.asp

La recherche sur "carte hexadécimale de tuilage" vous donnera beaucoup de coups sûrs, certains utiles, d'autres non.

Tim Holt
la source
1

J'utilise plusieurs caméras réseau PTZ de Sony, modèle SNC-RX570N, dans le but de suivre des objets en mouvement dans le ciel et de trianguler pour obtenir de véritables pistes 3D. Un des aspects de la configuration initiale consiste à définir des "circuits" sans surveillance, pour lesquels des points de cheminement doivent être choisis. Il y a un nombre restreint de tels points de cheminement programmables, et je veux couvrir tout l'hémisphère (la "sphère céleste") de l'horizon au zénith, sans laisser de lacunes.

Je me suis donc posé la question "Quel est le nombre minimum de waypoints dont j'ai besoin pour une couverture complète (pas de lacunes)?". J'ai découvert que je ne peux pas vraiment comprendre cela.

La caméra a un panoramique sans fin (360 degrés) et une inclinaison de 0 à 90 degrés, il est donc théoriquement possible d'obtenir une couverture complète. L'écran de l'appareil photo, destiné à un usage informatique, est rectangulaire au format 4: 3. Le champ de vision horizontal approximatif avec un zoom 1x est de 58 degrés.

Il existe deux façons de représenter le problème, selon la projection choisie: - rectiligne comme Mercator, où l'horizon est "l'équateur" et le zénith est "le pôle", dilaté sur 360 degrés de panoramique. - polaire, où l'horizon est la circonférence du cercle et le zénith est le centre du cercle.

Je trouve polaire la façon la plus simple d'aborder le problème. Je peux découper le cercle en tranches de tarte de taille FOV horizontale, et cela me dit que j'ai besoin de 7 points de cheminement autour du cercle avec ce H-FOV de 58 degrés. Jusqu'ici tout va bien. Le rayon intérieur est simplement l'inclinaison ou V-FOV, qui est 3/4 de 58 degrés. Jusqu'ici tout va bien - j'ai couvert les parties les plus externes du cercle.

Mais cela devient plus difficile à l'approche du zénith. Je suppose que l'un de mes waypoints est exactement au zénith. Comment mapper mon rectangle de vue sur la région autour du centre du cercle? Est-ce que cette forme est un rectangle, une ellipse, un coussin ou quoi? Comment puis-je remplir le bit central entre la belle couverture extérieure soignée et cette forme étrange au zénith? Déconcerté.

Je note que l'angle solide d'un hémisphère est de 2 * PI stéradians, et celui de mon FOV à 1x zoom est de 0,762 st, ce qui signifie que j'ai besoin d'un minimum de 9 pavages. Je soupçonne que la réponse est supérieure à 9.

Andrew
la source
Que diriez-vous de cela. Le cercle a PI ^ 2 rad ^ 2 de surface, et les rectangles FOV sont de surface 0,75 rad ^ 2. Donc, naïvement, nous avons besoin de 13,16 points qui doivent être arrondis pour une couverture complète à 14 points. La question est maintenant - comment les placer?
Andrew
0

Si vous voulez faire une grille mondiale, je vous suggère de diviser la planète en pays ou continents, et de faire une grille carrée correctement centrée sur chacun. Laissez l'océan recouvrir les coutures.

zaratustra
la source
En fait, ma question est "comme je ne peux évidemment pas faire ce que vous pensiez que je demandais vraiment, que puis-je faire à la place?"
clweeks
Très bien, édité alors.
zaratustra
Ouais, je suppose que j'ai été mis de côté par l'autre partie. Je pensais à implémenter la carte de Dymaxion de Fuller, mais travailler avec des tuiles triangulaires semblait autant d'un clusterF * que le problème de mosaïque polaire avec lequel je commence. Donc, avec votre suggestion, si quelqu'un navigue d'Amérique du Nord vers l'Asie du Nord, et les coordonnées importent (peut-être peuvent-elles établir des bases flottantes ou quelque chose) comment puis-je assembler les coutures? Venez juste avec un tableau des connexions de type NA: A5 -> A: Z475?
clweeks
J'imagine. Bien que s'ils parviennent à le faire, je leur donnerais juste une récompense bonus et les mettrais hors de la grille jusqu'à ce qu'ils aillent dans un endroit sensé.
zaratustra