Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

1

13.07.2015, 23:25

[2D] Rotiertes Rechteck: Jeden Punkt bestimmen in X und Y [2D]

Hallo :)

Und zwar:
Ich möchte ein Rechteck drehen, von den ich Position, Rotation und Größe habe.

Wie stelle ich das am besten an?
Ich brauche von jeden Eckpunkt eine 2D Koordinate !
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

m3xx

Alter Hase

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

2

13.07.2015, 23:49

Um es einfach zu halten, könntest du die Eck-Koordinaten deines Rechtecks ermitteln und rotierst dann alle 4.
Die Formeln dafür sind folgende:

x = x0 + (x - x0) * cos(a) - (y - y0) * sin(a)
y = y0 + (x - x0) * sin(a) - (y - y0) * cos(a)
Wobei x0 und y0 die Koordinaten des Drehpunkts sind.

Ich weiß gerade nicht aus dem Kopf, ob es dafür noch simplere Formeln, ggf. für Körper, gibt. Aber das funktioniert auch

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

13.07.2015, 23:52

Üblicherweise werden die Ecktpunkte des Rechtecks als Vektoren interpretiert und mit einer Transformationsmatrix multipliziert. Und die Transformationsmatrix bekommt man wenn man die einzelnen Matrizen für Translation, Rotation etc. multipliziert.

Es lässt sich aber auch mit einfacher Schulmathematik lösen, dürfte zu einem ähnlichen Ergebnis führen, nur der Weg dorthin ist ein anderer. Überleg doch einfach mal wie Translation, Rotation und Skalierung auf die Punkte wirken.

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

4

13.07.2015, 23:53

du hast die position, also ich nehme mal an das linke obere Eck. Von dort gehst du ja direkt die x-Größe nach rechts und hast den nächsten Punkt.
Du hast dorhin den Vektor (1,0) (normiert).
den willst du jetzt rotieren um einen Winkel w gegen den Uhrzeigersinn.
Vielleicht erinnerst du dich noch an den Einheitskreis, denn jetzt hast du den neuen Vektor mit (cos(w), sin(w)) gegeben.
Diesen multiplizierst du mit der Breite und dein neuer Punkt ist position + (cos(w), sin(w)) * breite.

Bedenke wenn du ihn über 90° drehst wird aus Breite Höhe.

Der andere Vektor, welche früher nach unten ging, war (0,1). Diesen musst du auch drehen.
Da er nach unten zeigt, ist der Winkel um den du ihn drehst w, von diesem ziehst du 90° ab, da du den Einheitskreis sozusagen gedreht hast. Dann ist der neue Vektor (cos(w-90°), sin(w-90°))
Wieder mit der Höhe diesmal multiplizieren.

Und jetzt kannst du dir die Punkte einen nach dem anderen ausrechnen.
Sagen wir (cos(w), sin(w)) * breite sei Vektor a und (cos(w-90°), sin(w-90°)) * höhe sei Vektor b.

Dann rechnest du die Punkte so aus:
Punkt 1: Position
Punkt 2: Position + a
Punkt 3: Punkt 2 + b
Punkt 4: Punkt 3 - a

Ich hoffe das passt so.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »birdfreeyahoo« (15.07.2015, 19:50)


hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

5

15.07.2015, 13:54

Danke :)
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

15.08.2015, 10:51

Vektoren und Matrizen funktionieren auch perfekt mit 2 Dimensionen. Da braucht man keine 3. Tobiking hat ja schon angesprochen wie das bei 2 Dimensionen aussehen könnte. Und in einem rutsch ist auch relativ. Eine Multiplikation zwischen einem Vektor und einer Matrix ist halt nicht das selbe wie eine Multiplikation zwischen zwei natürlichen Zahlen. Je nach Bibliothek mit welcher du arbeitest wird es so etwas schon als Funktion geben sodass du den Code nicht selbst schreiben musst.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

16.08.2015, 13:00

Braucht er nicht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige