Frage

Ich entwickle ein Indie-Videospiel, und habe unter der Annahme, dass in Betrieb, weil der thumbstick auf meinem Controller einen kreisförmigen Bewegungsbereich hat, gibt sie „circular“ koordiniert; das heißt, Koordinaten kartesische in einem kreisförmigen Bereich (mit dem Radius 1) eingeschränkt. In der Tat sind die Koordinaten „square“; beispielsweise die rechte obere Position thumbstick Register als x = 1, y = 1 ist. Wenn ich die Koordinaten von kartesischen in polare wandeln, kann die Größe überschreiten 1 -., Die bewirkt, dass der Spieler schneller diagonal bewegen können, als sie kann vertikal oder horizontal

Also, um zu klären, ich die Position eines analogen thumbstick in Bezug auf eine Richtung und Größe aufnehmen wollen, wo der Betrag zwischen 0 und 1. Die thumbstick kehrt Koordinaten auf einer quadratischen Ebene ist, so einfach Umwandeln der Koordinaten von kartesisch zu polar ist nicht ausreichend. Ich glaube, ich brauche die Koordinate Raum zu konvertieren, aber das ist es, die Grenzen meines Affenhirns drücken.

War es hilfreich?

Lösung

Siehe Zuordnen eines Quadrat zu einem Kreis . Es gibt auch eine schöne Visualisierung für die Abbildung. Sie erhalten:

xCircle = xSquare * sqrt(1 - 0.5*ySquare^2)
yCircle = ySquare * sqrt(1 - 0.5*xSquare^2)

Andere Tipps

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

Zum Beispiel dieser Zuordnung wird auch funktionieren

  

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

     

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

, wobei (u, v) sind kreisförmige Scheibe Koordinaten und (x, y) sind quadratisch Koordinaten.

Ein Bild sagt mehr als tausend Worte, so sind hier einige Bilder, die die Nicht-Eindeutigkeit der Zuordnung und seine Umkehrung zu illustrieren.

 circular Brady bunch


 squared Boston Celtics

For a C++ implementation dieses anderen Mapping, gehen Sie zu
http://squircular.blogspot.com/2015/09/fg-squircle -mapping.html
Siehe http://squircular.blogspot.com für mehr Bilder von Kartierungsergebnissen.

Siehe auch „Analytische Methoden für die Disc quadriert“ für ein Papier verschiedene Mapping-Gleichungen mit Beweisen zu diskutieren und Ableitungen.

Dividieren jeden Wert durch den Betrag alle Werte auf einen Einheitsvektor zu normalisieren, z.

magn = sqrt(x * x + y * y);
newx = magn > 1.0 ? x / magn : x;
newy = magn > 1.0 ? y / magn : y;

Dies kann jedoch zur Folge haben, die Größe Clipping stattdessen für die inneren Werte der Normalisierung .. Das heißt, werden Sie den gleichen Wert für einen Regler geschoben „voll“ in der oberen linken und einem Controller erhalten fast gedrückt vollständig in die gleiche Richtung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top