Tetrisbaustein Drehen



  • Hallo,

    Ich programmiere gerade ein mit Tetris vergleichbares Spiel mit OpenGL.
    Ich verzweifle im Moment daran, wie ich meinem PC beibringen soll die Steine zu drehen (z.B 90° nach links)

    Mein Gesamtstein (zum Beispiel in L-Form) besteht programmiertechnisch aus 4 quadratischen Einzelsteinen. Die Einzelsteine haben jeweils zwei Koordinaten, für die X und die Y Position im Raster.
    Zum Beispiel haben die Steine meines L's, welches aufrecht links oben im Raster sitzt, die Koordinaten:

    (0|0)
    (0|1)
    (0|2)(1|2)

    Jetzt möchte ich die Steine um 90° nach links drehen, sagen wir der Stein (0|1) beschreibt die Drehachse, er ändert also seine Position nicht.
    Jemand eine Idee wie ich die Koordinaten der restlichen Steine neuberechnen kann?



  • Schonmal mit sin() und cos() probiert?



  • ja, aber nicht erfolgreich...

    /Edit:
    Dein Tipp hat mir geholfen:

    Das ganze Funktioniert so:
    -Zuerst die Koordinaten auf die Drehachse beziehen, aus meinem L wird dann:

    (0|-1)
    (0|0) <-- Drehachse
    (0|1)(1|1)

    Dann die Formel anwenden:
    x' = x * cos(a) - y * sin(a)
    y' = x * sin(a) + y * cos(a)

    wobei a = Winkel Alpha.

    Anschließend alle Koordinaten wieder + (0|1) rechnen und fertig!



  • Jo 😉

    Musst nur beachten, dass die Gradangaben umzurechnen, also 90 Grad = 1/2 Pi und so, wenn die Funktionen RAD-Werte erwarten



  • Hab ich per

    #define PI 3.141592653589793f
    #define SIN(a) sin(a*PI/180.0f)
    #define COS(a) cos(a*PI/180.0f)
    

    gelöst.



  • RedPuma schrieb:

    #define PI 3.141592653589793f
    

    Lass hier besser das "f" weg, dann hast du einen genaueren Double-Wert. Floats sind, meine ich, nur auf 6 Nachkommastellen genau.



  • Brauche für meine Grafischen Zwecke nur float-Genauigkeit, ich will ja keine exakten mathematischen Berechnungen ausführen.
    Wenn du dir den Source-Code von Half-Life 2 anschaust, da sind alle Fließkommazahlen floats.

    Hab ich nebenbei ganz vergessen:
    Danke für alle Antworten.



  • RedPuma schrieb:

    Brauche für meine Grafischen Zwecke nur float-Genauigkeit, ich will ja keine exakten mathematischen Berechnungen ausführen.
    Wenn du dir den Source-Code von Half-Life 2 anschaust, da sind alle Fließkommazahlen floats.

    Ok. Ich dachte, es wäre vielleicht ein Versehen, da du so viele Stellen angegeben hast. 🙂



  • Wo gibts den Sourcecode von Halflife 2?



  • MasterCounter schrieb:

    Wo gibts den Sourcecode von Halflife 2?

    http://en.wikipedia.org/wiki/Half-Life_2#Source_code_leak



  • MasterCounter schrieb:

    Wo gibts den Sourcecode von Halflife 2?

    Davon gab es doch damals mal eine Raubkopie. Irgendein Spinner hat den Source von Valve geklaut. Wahrscheinlich meint er den...



  • Erm, wenn man (so wie ich) Half-Life 2 besitzt kann man sich über Steam das Source SDK runterladen, da ist der finale Source-Code von Half-Life 2 (nicht der der Source Engine) ganz offiziell und legal enthalten.
    Ansonsten wäre wohl die Modding-Community nicht so groß.

    Ich habe mir mit dem Source-Code übrigends selber das Programmieren mit C++ beigebracht, ein paar basics konnte ich zwar schon vorher, aber kompliziertere Sachen wie Zeiger, Klassen und Templates waren mir unbekannt.



  • Hast du schonmal was von Matrizen gehört? Wenn nicht wird es Zeit. Alles was du brauchst ist eine Drehmatrix.


Anmelden zum Antworten