Wie können Sie mit Polarverzerrungen umgehen, wenn Sie die Oberfläche einer Kugel mit Kacheln abbilden?

24

Es ist einfach, mit der Interaktion von Standorten in einem sauberen kartesischen Raster umzugehen. Es ist nur Vanille-Mathe. Und Sie können die Geometrie der Kugeloberfläche für einige ignorieren, wenn Sie nur die Pole oder etwas abschneiden möchten. Aber ich habe immer wieder Ideen für Spiele, bei denen es auf den Polarraum ankommt. Geocodierte ARGs und globale Roguelikes und so.

Ich möchte quadratische (ish?) Standorte, die durch quadratische Kacheln mit der gleichen Größe auf der ganzen Welt einigermaßen darstellbar sind.

Das muss ein gelöstes Problem sein, oder?

Was sind die Lösungen?

ETA:

Am Äquator - und unter der Annahme, dass Ihre quadratischen Positionen relativ klein sind, ist es nah genug, dass Sie davonkommen können, wenn Sie ein Quadrat in den Reihen nördlich und südlich der äquatorialsten Reihe haben. Und Sie könnten wahrscheinlich damit durchkommen, indem Sie den Unterschied von Hand auf ungefähr 45 Grad erhöhen. Aber irgendwann müssen Sie weniger Quadrate in einer umlaufenden Polreihe haben. Wenn ich die Länge der Zeile um eins reduziere und die Quadrate um 1/2 versetze, sind sie wie Hexes und es ist relativ einfach, die Codierung vorzunehmen, um die Verbindungen zu verfolgen. Aber wenn man auf die Pole-Station kommt, wird es immer extremer.

Die Oberfläche der Welt auf die Oberfläche eines Würfels zu projizieren, ist verlockend. Aber ich dachte mir, dass es schon elegantere Lösungen geben muss.

Wenn ich den Würfel gemacht habe (ihn nicht durch Geodäsie weiter zerlegt habe) Gibt es Vor- und Nachteile, wenn ich den Stab in der Mitte eines Gesichts oder am Scheitelpunkt von drei Seiten platziere?

Clweeks
quelle
1
Könnten Sie näher erläutern, was Sie unter "Quadrat (ish)" verstehen? Wie quadratisch ist "Quadrat (ish)"?
Steve H

Antworten:

9

Ich wollte schon immer ein Spiel sehen, bei dem auf der sphärischen Karte ein normales Polyeder verwendet wurde, anstatt die Welt auf einem Torus zu spielen. Diese Technik wird als Dymaxion-Karte bezeichnet . (Quelle: grunch.net )Alt-Text         

Ich würde ein Ikosaeder empfehlen . Plotten Sie das aktuelle Dreieck so, dass es an einer Kante eines Quadrats ausgerichtet ist. Wenn der Spieler das Dreieck verlässt, ziehen Sie das nächste Dreieck nach oben und ordnen Sie es wieder identisch zu. Die Koordinaten des Spielers werden dann dem neuen Abschnitt zugeordnet. Jeder Abschnitt Ihrer Karte hat also ein eigenes Koordinatensystem. Außerdem müssen Sie den Hintergrund für die 3 angrenzenden und 9 halb angrenzenden Abschnitte zeichnen. Ich glaube nicht, dass der Benutzer feststellen kann, wie es implementiert ist, wenn es gut gemacht ist.

Hier ist ein Beispiel, wie dies funktionieren könnte.

Nachdem Sie dies gelesen haben, werden Sie wahrscheinlich die klassische Torus-Karte verwenden und ich werde darauf warten, ein echtes polyedrisches Universum zu sehen.

deft_code
quelle
Ich werde keinen Torus verwenden. Ich könnte einen Zylinder benutzen, wie es die Civ-Spiele tun. Aber angesichts des Mangels an brillanten Lösungen neige ich ernsthaft zu einem Würfel. Ein Würfel ist ein Polyeder! :)
Clweeks
5

Wenn Sie eine Kugel mit einer geodätischen Basis erstellen, wird der polare Bereich in Bezug auf den Scheitelpunktabstand nicht anders behandelt als jeder andere Bereich, was eine gleichmäßige UV-Kartierung erleichtert.

Mit den meisten Modellierungs-Apps können Sie ein Kugelprimitiv mit einem geodätischen Design erstellen.

Steve H
quelle
Das Problem ist, dass Sie in diesem Fall Diamanten anstelle von Quadraten erhalten, und das ist nicht das, was der OP wollte.
Kornel Kisielewicz
Es sei denn, ich vermisse etwas, das mir keine Regionen gibt, die einfacher zu koordinieren, zu kartieren und zu verknüpfen sind ... oder?
Clweeks
Geodätisch scheint mir der Weg zu sein, ich kann mir keine anderen Optionen für eine regelmäßige Unterteilung vorstellen. Wenn Sie wirklich quadratische Bereiche benötigen, können Sie mit Sicherheit einen quadratischen Bereich erstellen, der in der Mitte des Dreiecks zentriert ist, obwohl er sich mit anderen Kacheln überlappt. Bei ausreichend großen Kugeln (und ausreichend kleinen Dreiecken) ist der Versatz zwischen den quadratischen Bereichen und den angrenzenden Dreiecksflächen vernachlässigbar. Das sollte den Vorteil bewahren, lokale (dh gleiche quadratische) Wechselwirkungen in demselben Koordinatensystem beschreiben zu können, nicht wahr?
MrCranky
Ich denke, dass es einige geodätische Formen gibt, die ungefähre Quadrate ergeben können, wenn sie WIRKLICH benötigt werden.
Speeder
Sie erhalten Diamanten anstelle von Quadraten, aber das sollte ziemlich einfach zu transformieren sein, um es zu korrigieren. Keine Stangen garantiert.
ChrisE
5

Es gibt keine Möglichkeit, eine Kugel mit Quadraten (oder Rechtecken) "abzubilden" und sie alle an "gemeinsamen" Eckpunkten zusammenzufügen.

Wäre es jedoch machbar, die "lokale Sicht" bei Bedarf zu generieren? Der Problemraum wird in der Frage nicht wirklich angegeben, aber wenn ich an etwas arbeite, bei dem ich eine Stadtansicht haben möchte, aber die Welt drehen möchte, kann ich vorübergehend nur ein Raster auf einen "ebenen" Abschnitt von abbilden die Welt. Der Ursprung des Gitters wäre dort, wo sich Ihr lokales Zentrum befand, und die Normalen an diesem Punkt stimmen mit der Normalen auf der Oberfläche des Planeten überein.

Wenn man dann das Netz verlässt, wird bei Bedarf ein neuer generiert.

Dies kann für das OP funktionieren oder nicht, aber für einige kann es nützlich sein.

Dash-Tom-Bang
quelle
4

Nehmen Sie einen Würfel, wobei der Abstand zwischen den Eckpunkten und der Mitte des Würfels dem gewünschten Radius entspricht. Sie haben eine Kugel aus 6 Quadraten.

Nehmen Sie nun in jedem Schritt jedes Quad, teilen Sie es in 4 und verschieben Sie die neuen 5 Eckpunkte (einer in der Mitte und 4 an den Rändern - Warnung, sie sind GEMEINSAM) von der Mitte weg, so dass sie das gewünschte mögen Radius.

Nein, diese Methode ist nicht perfekt, aber es ist zumindest eine mehr oder weniger gleichmäßige Verteilung über die Kugel.

Kornel Kisielewicz
quelle
3
Die Verzerrung ist dabei tatsächlich ziemlich stark - die Quadrate in der Mitte des Gesichts sind nahezu quadratisch, und die Quadrate in der Nähe der Ecken sind stark verzerrt.
JasonD
@ JasonD: Es wird immer noch besser als alle Diamanten. Schlagen Sie eine Lösung vor, die weniger verzerrt ist, wenn Sie eine Ablehnung wünschen.
Kornel Kisielewicz
Nun, mit geodätischer Teilung kann man eine Kugel ziemlich gut approximieren, aber ich bin mir nicht sicher, wie mir das hilft.
Clweeks
1

Mit dem Dymaxion Max haben Sie Sechsecke in Dreiecken auf einer ebenen Fläche angeordnet, aber weil die Karte nicht wirklich flach ist, sind sie Fünfecke. Wenn Sie möchten, dass der Player beim Überqueren bestimmter Bereiche die Orientierung beibehält, müssen Sie die Positionskarten von der tatsächlichen Speicherung trennen. Für Objekte wie Gebäude können Sie eine kleine Karte mit Rechteckvektoren speichern und diese dann mit aller Kraft in der gewünschten Ausrichtung zeichnen.

Sie müssten das Innere nicht immer so aussehen lassen, als hätte es kürzlich ein Erdbeben gegeben, denn ich denke, der durchschnittliche Spieler sollte nicht einmal die Augen darüber aufschlagen, eine Tür im Nordosten zu betreten, sondern einen Bildschirm mit der darauf ausgerichteten Vordertür betreten Süden und das ganze Gebäude in einem regelmäßigen Raster.

Wenn Sie jedoch nur Gebäude und wichtige Orte wie dieses lagern, haben Sie trotzdem die ganze Arbeit für ein Fußballmuster geleistet. Das Endergebnis ist, dass Sie die Welt als ein nicht quadratisches Muster speichern und sie dann in ein solches Gitter zwingen, wo immer sich der Spieler gerade befindet.

Es gibt jedoch eine andere Alternative: Wenn Sie ihnen nicht so genau einen Hinweis auf die Kugel geben, wie wenn Sie ihnen nur einen Kompass mit geringer Genauigkeit geben, um ihnen mitzuteilen, welche der vier orthogonalen Richtungen dem Norden am nächsten liegt, können Sie davonkommen mit nur 90-Grad-Drehungen für jeden Ort, zu dem der Spieler gegangen ist. Angesichts der angenommenen Grafikebene ist es nicht so, als müsste man sich Sorgen machen, dass ein hohes Gebäude eine Tür verdeckt. Solange sie wussten, ob sie sich in der Nähe der Pole befanden oder nicht, sollten sie sich nicht zu sehr darüber aufregen, dass sich der Kompass auf ihnen ändert, es sei denn, die dortigen NPCs forderten sie auf, nach Nordosten zu fahren, oder sie versuchen, tatsächlich zu bestimmten Breiten- und Längenkoordinaten zu gelangen .


quelle
1

Sie stellen eine Frage, die sich Menschen, die Karten herstellen, schon lange gestellt haben haben :)

Auf jeden Fall sollten Sie sich bei Map Projectsions informieren , um einige Erkenntnisse und Ideen zu erhalten, die hilfreich sein könnten. Über die Herausforderung, die Oberfläche einer Kugel auf / mit einer flachen 2D-Ebene darzustellen, haben die Menschen lange nachgedacht.

Die kurze Antwort lautet: Nein, das können Sie nicht. Das ist der Grund, warum beim Betrachten von Weltkarten einige Teile verzerrt sind und andere nicht. Normalerweise sind es die Pole, weil sich die meisten Karten um unpolare Gebiete handeln.

Wie andere Antworten bereits sagten, besteht die Antwort darin, entweder eine andere Form (z. B. Sechsecke oder Dreiecke) zu verwenden oder Ihre Karte dynamisch im Handumdrehen für den aktuellen Standpunkt des Benutzers zu generieren.

Quadratische Kacheln sind ziemlich einfach zu verwalten, keine Frage, aber ich denke nicht, dass das Erstellen einer hexadezimalen Kachelkarte so schwierig ist.

Hier ist ein älterer Artikel von GameDev.net, den Sie vielleicht nützlich finden. Es geht darum, isometrische und hexagonale Kacheln in einem Raster zu erstellen.

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

Googeln "Fliesen hex Karte" gibt Ihnen eine Menge Treffer, einige nützlich, andere nicht.

Tim Holt
quelle
1

Ich verwende mehrere PTZ-Netzwerkkameras von Sony, Modell SNC-RX570N, um sich bewegende Objekte am Himmel zu verfolgen und zu triangulieren, um echte 3D-Spuren zu erhalten. Einer der Aspekte der Ersteinrichtung besteht darin, unbeaufsichtigte "Touren" zu definieren, für die Wegpunkte ausgewählt werden müssen. Es gibt eine begrenzte Anzahl solcher programmierbarer Wegpunkte, und ich möchte die gesamte Hemisphäre (die "Himmelssphäre") vom Horizont bis zum Zenit abdecken, ohne Lücken zu lassen.

Deshalb habe ich mir die Frage gestellt, wie viele Wegpunkte ich mindestens für die vollständige Abdeckung benötige (keine Lücken). Ich habe festgestellt, dass ich das tatsächlich nicht vollständig herausfinden kann.

Die Kamera verfügt über eine endlose Schwenkung (360 °) und eine Neigung von 0-90 °, sodass theoretisch eine vollständige Abdeckung möglich ist. Das für Computer vorgesehene Kamera-Display hat ein rechteckiges Seitenverhältnis von 4: 3. Grobe horizontale FOV bei 1x Zoom ist 58 Grad.

Es gibt zwei Arten, das Problem darzustellen, je nachdem, welche Projektion man wählt: - geradlinig wie Mercator, wobei der Horizont "der Äquator" und der Zenit "der Pol" ist und über 360 Grad der Pfanne erweitert ist. - polar, wobei der Horizont der Umfang des Kreises und der Zenit der Mittelpunkt des Kreises ist.

Polar finde ich den einfachsten Weg, um das Problem anzugehen. Ich kann den Kreis in horizontale FOV-große Tortenscheiben zerlegen, und dies sagt mir, dass ich 7 Wegpunkte um den Kreis mit diesem 58-Grad-H-FOV benötige. So weit, ist es gut. Der innere Radius ist einfach die Neigung oder das V-FOV, was 3/4 von 58 Grad ist. So weit so gut - ich habe die äußersten Teile des Kreises abgedeckt.

Aber es wird schwieriger, wenn wir uns dem Zenit nähern. Ich gehe davon aus, dass einer meiner Wegpunkte genau im Zenit liegt. Wie ordne ich mein Ansichtsrechteck der Region um den Mittelpunkt des Kreises zu? Ist diese Form ein Rechteck, eine Ellipse, ein Nadelkissen oder was? Wie fülle ich das mittlere Bit zwischen der hübschen, sauberen Außendecke und dieser merkwürdigen Form im Zenit aus? Flummoxed.

Ich stelle fest, dass der Raumwinkel einer Hemisphäre 2 * PI-Steradiane beträgt und dass mein FOV bei 1x Zoom 0,762 st beträgt, was bedeutet, dass ich mindestens 9 Tessellationen benötige. Ich vermute, die Antwort ist höher als 9.

Andrew
quelle
Wie wäre es damit? Der Kreis hat eine Fläche von PI ^ 2 rad ^ 2, und die FOV-Rechtecke haben eine Fläche von 0,75 rad ^ 2. Naiv benötigen wir also 13,16 Punkte, die für eine vollständige Abdeckung auf 14 Punkte aufgerundet werden müssen. Die Frage ist nun - wie sollen diese platziert werden?
Andrew
0

Wenn Sie ein weltweites Gitter erstellen möchten, schlage ich vor, dass Sie den Planeten in Länder oder Kontinente aufteilen und jeweils ein quadratisches Gitter erstellen, das genau darauf ausgerichtet ist. Lassen Sie den Ozean die Nähte bedecken.

Zaratustra
quelle
Eigentlich lautet meine Frage: "Da ich offensichtlich nicht tun kann, was Sie dachten, fragte ich mich wirklich, was könnte ich stattdessen tun?"
Clweeks
Sehr gut, dann bearbeitet.
Zaratustra
Ja, ich schätze, ich wurde vom anderen Teil abgelenkt. Ich dachte darüber nach, Fullers Dymaxion Map zu implementieren, aber die Arbeit mit dreieckigen Kacheln schien mir genauso ein ClusterF * zu sein wie das Polar-Tiling-Problem, mit dem ich anfange. Also, mit Ihrem Vorschlag, wenn jemand von Nordamerika nach Nordasien segelt und die Koordinaten eine Rolle spielen (vielleicht können sie schwimmende Basen oder so etwas herstellen), wie kann ich die Nähte zusammennähen? Überlegen Sie sich einfach eine Tabelle mit Anschlüssen des Typs NA: A5 -> A: Z475.
Clweeks
Ich vermute. Wenn sie das schaffen, gebe ich ihnen einfach eine Bonusbelohnung und stelle sie vom Netz, bis sie irgendwo einen vernünftigen Weg finden.
Zaratustra