Wie kann ich Koordinaten eines Quadrats in Koordinaten eines Kreises umwandeln?

7

Ich entwickle ein Indie-Videospiel und gehe von der Annahme aus, dass der Daumenknüppel auf meinem Controller einen kreisförmigen Bewegungsbereich hat und "kreisförmige" Koordinaten liefert; das heißt, kartesische Koordinaten sind auf einen kreisförmigen Bereich (von Radius 1) beschränkt. Tatsächlich sind die Koordinaten "Quadrat"; Beispielsweise registriert sich die obere rechte Position des Daumenknüppels als x = 1, y = 1. Wenn ich die Koordinaten von kartesisch in polar umwandle, kann die Magnitude 1 übersteigen - was dazu führt, dass der Spieler sich diagonal schneller bewegen kann als vertikal oder horizontal.

Um das klarzustellen, möchte ich die Position eines analogen Daumensticks in Richtung und Größe aufzeichnen, wobei die Größe zwischen 0 und 1 liegt. Der Daumenstift gibt Koordinaten auf einer quadratischen Ebene zurück, also einfach die Koordinaten umwandeln Kartesisch zu polar ist nicht ausreichend. Ich denke, ich muss die Koordinate Raum umwandeln, aber das drückt die Grenzen meines Affengehirns aus.

    
Metaphile 25.10.2009, 19:32
quelle

3 Antworten

15

Siehe Zuordnen eines Quadrats zu einem Kreis . Es gibt auch eine schöne Visualisierung für das Mapping. Du bekommst:

%Vor%     
Eemeli Kantola 25.10.2009, 19:40
quelle
8

Die Zuordnung ist nicht eindeutig. Es gibt viele andere Lösungen für diese Frage.

Diese Zuordnung funktioniert beispielsweise auch

  

u = x √ (x² + y² - x²y²) / √ (x² + y²)

     

v = y √ (x² + y² - x²y²) / √ (x² + y²)

Dabei sind (u, v) Kreisscheibenkoordinaten und (x, y) sind quadratische Koordinaten.

Ein Bild sagt mehr als tausend Worte. Hier sind einige Bilder, um die Nichteindeutigkeit des Mappings und seine Umkehrung zu veranschaulichen.

For a C++ implementation von diesem anderen Mapping, gehen Sie zu Ссылка < br> Weitere Bilder zu Mapping-Ergebnissen finden Sie Ссылка .

Siehe auch "Analytische Methoden zur Quadratur der Scheibe" für eine Arbeit, in der verschiedene Abbildungsgleichungen mit Beweisen und Ableitungen diskutiert werden.

>     
Ch Fong 13.02.2016 22:03
quelle
0

Teilen Sie jeden Wert durch die Größe, um alle Werte auf einen Einheitsvektor zu normieren, z. B.

%Vor%

Dies hat jedoch den Effekt, dass die Größe abgeschnitten wird, anstatt die inneren Werte zu normalisieren. Das heißt, Sie erhalten den gleichen Wert für einen Controller, der "ganz" in den oberen linken Bereich gedrückt wird und einen Controller fast ganz in die gleiche Richtung gedrückt.

    
Jason 25.10.2009 19:36
quelle

Tags und Links