Atan2 Problem.
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: Atan2 Problem. |
![]() Antworten mit Zitat ![]() |
---|---|---|
Atan2 zeigt mir ja den winkel von -180 und +180 grad an
was is wenn ich nun 8 bilder habe 0 bis 7 und diese möchte ich anzeigen lassen je nachdem welche richtung die maus schaut? z.b. bild 0 wenn maus rechts 1 wenn unten rechts und 2 wenn unten. hab schon bissel experementiert, aber das führte bislang nur zum absturts des programms. naja irgendwo auch logisch -180 ^^ ich weiss da momentan kein rat. danke für eure hilfe im vorfeld. |
||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay.
Du kannst zu deinem Atan2 Winkel einfach 180 dazu rechnen. 360 Crad entsprechen 7 Animbilder. DrawImage AnimImg,0,0,(360/Float(MaxFrame))*(Atan2(MX,MY)+180) So ähnlich könnte es functionieren. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab jetzt keine Zeit, werde dir heut abend hier was reineditieren:
Nur soviel vorneweg: 360° entsprechen mitnichten 7 Frames (ich denke mal Matthias meint dass bei seiner Denkweise Frames zwischen 0 und 7 rauskommen), sondern exakt sovielen wie man selbst festlegt. Und 7 wäre, da 360 nicht wirklich durch 7 teilbar ist, eine schlechte Wahl. In der Regel werden 8 oder 16 Frames verwendet, was Du in deiner Frage hast geht von 8 Frames aus, und dafür werde ich heute abend eine Antwort nachliefern. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich habe 8 frames
0 = auch ein bild dann halt 1- 7 also insgesammt 8 bilder |
||
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, warum dann nicht einfach so?
BlitzBasic: [AUSKLAPPEN] Local frame%=(angle+180)*8/360 Wobei angle der mit Atan2 ermittelte Gradwert darstellt, der ja nach deinen Angaben immer zwischen -180 und 180 liegt. |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, jetzt aber:
Wie Matthias schon anmerkte erledigst Du die Probleme mit der -180°-Winkelei durch ein simples aufaddieren von 180 zu deinem Winkel. Was bedeutet das aber im Klartext? Ganz einfach, Du rotierst dein Ergebnis um 180°, also um einen Halbkreis. Das ist im hier vorliegenden Fall aber vollkommen wurscht, weil Du ja beliebig festlegen kannst welches Frame an welcher Stelle in deiner Grafik steht. Du passt also die Animationsreihenfolge einfach deinen Ergebnissen an ![]() Daher wäre die simpelste Lösung in der Tat: Framenummer = (Atan2(yDifferenz , xDifferenz)+180)/(360/Animationsschritte) ABER: Das hat einen kleinen, aber dennoch unschönen Haken. Da ja das Animationsframe durch einfache Division des Winkels durch die Größe eines Einzelschrittes erfolgt, liegen die Grenzen nicht so wie man es erwarten würde. Beispiel: Bei 8 Richtungen fängt zb. Frame 0 bei 0° an und geht bis 44°. Nehmen wir mal an 0° sind rechts und 44° sind dann schräg oben rechts, dann wird die animation "Laufe gradeaus" für diesen Bereich gezeigt. Wenn nun der Winkel nah an den 44° ist sollte die Figur aber doch schon die Animation "laufe schräg hoch" benutzen damit es gut aussieht. Ebenso wäre bei 359° schon die Animation "laufe schräg runter dran, obwohl es ja wesentlich näher an geradeaus laufen wäre. Um das zu beheben kannst Du dir aber zu Nutze machen was wir eingangs festgestellt haben: Durch das aufaddieren einer Zahl zu deinem Winkel rotierst Du die komplette Bewegung. Du musst also nur einen halben Animationsschritt auf deinen Winkel draufschlagen und schwupps wird immer in der Mite zwischen den Winkeln auf das nächste Frame weitergeschaltet. Also: Framenummer = ((Atan2(yDifferenz , xDifferenz)+180+(180/Animationsschritte))Mod 360) /(360/Animationsschritte) Das Mod 360 ist drin um die Berechnung auf Werte zwischen 0 und 359 zu begrenzen, da sonst falsch hohe Framenummern entstehen könnten. Hier noch ein Beispiel, in BMax, allerdings sollte es mit kleinsten Änderungen auch in BB laufen. BlitzMax: [AUSKLAPPEN] Graphics 640 , 480 |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group