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

  • »MuesliSchuessel« ist der Autor dieses Themas

Beiträge: 25

Beruf: Schüler

  • Private Nachricht senden

1

10.10.2013, 18:11

2D Bestimmung der Eckpunkte eines gedrehten Rechtecks SDL2

Moin.

Da man ja jetzt mit der SDL2 seine Texturen drehen kann , dacht ich mir ich bau das mal in mein Projekt ein + eine Kollisionserkennung für eben gedrehte Rechtecke.
So , jetzt habe ich folgendes Problem :
Die Koordinaten ,die für die Eckpunkte rauskommen ,passen (außer bei einem Winkel von 0,180,360,... Grad) überhaupt nicht.
Getestet hab ichs mit einem Rechteck mit Höhe 50 und Breite 100.
Beim Beispiel im Anhang(90° Drehung von besagtem Rechteck;m ist der Mittelpunkt) müsste ich aber ,wenn ich mich nicht irre ,folgendes rausbekommen : a( 125,75) b(175,75) c(175,175) d(125,75).

Hier der Code ,mit dem ich die Koordinaten ermittle :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
        double cosVal = cos(-angle*DEG2RAD);
        double sinVal = sin(-angle*DEG2RAD);

        a.x -= center.x; b.x -= center.x; c.x -= center.x; d.x -= center.x;
        a.y -= center.y; b.y -= center.y; c.y -= center.y; d.y -= center.y;

        a.x = a.x * cosVal - a.y * sinVal; a.y = a.x * sinVal + b.y * cosVal;
        b.x = b.x * cosVal - b.y * sinVal; b.y = b.x * sinVal + b.y * cosVal;
        c.x = c.x * cosVal - c.y * sinVal; c.y = c.x * sinVal + c.y * cosVal;
        d.x = d.x * cosVal - d.y * sinVal; d.y = d.x * sinVal + d.y * cosVal;

        a.x += center.x; b.x += center.x; c.x += center.x; d.x += center.x;
        a.y += center.y; b.y += center.y; c.y += center.y; d.y += center.y;

Ich komm grad echt nicht mehr weiter.
Weiß eventuell jemand wo ich da auf der Leitung steh ?

Danke schonmal.
Edit: Anhang vergessen...
»MuesliSchuessel« hat folgendes Bild angehängt:
  • Unbenannt.PNG

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MuesliSchuessel« (10.10.2013, 18:26)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

10.10.2013, 18:19

Ich würde dir erst einmal empfehlen mit Vector2 zu rechnen anstatt mit einzelnen Koordinaten.
Mach dir zwei Vektoren xAxis und yAxis. Dann wird die Rechnung schonmal viel übersichtlicher, und die Chancen steigen, dass du den Fehler findest ...
(nein, ich weiß nicht, was falsch ist - aber bei so einem Code habe ich gar keine Lust, mir das genauer anzusehen)

  • »MuesliSchuessel« ist der Autor dieses Themas

Beiträge: 25

Beruf: Schüler

  • Private Nachricht senden

3

10.10.2013, 18:20

Alles klar ,dann werd ich das mal versuchen ,danke ;)
(kann ich durchaus verstehen)

4

10.10.2013, 20:53

Dein Problem ist, dass du deine Variablen änderst. Du veränderst z.B. erst a.x und rechnest damit dann a.y aus.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

10.10.2013, 21:59

Und das wäre nicht passiert, wenn man einen Vektor benutzt hätte! ;)

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

6

13.10.2013, 12:45

Eventuell auch nur ein Tippfehler? Ich habe die Mathematik jetzt nicht genau nachverfolgt, aber Zeile 7 im Code ist die einzige, die systematisch aus der Reihe tanzt, indem sie hinten b.y mit dem Cosinus multipliziert statt a.y, denn b.y. wird ja in der Zeile danach verwendet.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

7

13.10.2013, 22:37

dr. hallo hat den Fehler doch schon benannt.

Werbeanzeige