Autor Beitrag
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Fr 16.05.08 11:51 
Hallo,
ich habe ein Problem bei der Drehung eines Polygons um einen Winkel alpha.
Ich benutze bis jetzt die Formeln zum Drehung des kartesischen Koordinatensystems.
Wenn ich das Polygon um 90 Grad drehe kommt es nach viermaliger Drehung wieder in die Ausganspositon. Wenn ich es aber mit 45 Grad probiere dann ist mein Rechteck nach 8-maliger Drehung kein richtiges Rechteck mehr...
Am besten ihr guckt es euch mal in der Praxis an:
Einloggen, um Attachments anzusehen!
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Fr 16.05.08 12:14 
Typischer Fall von Rundungsfehler.

Drehst du um 90 Grad landet jeder Pixel genau auf einem neuen Pixel, du würdest also hier

ausblenden Delphi-Quelltext
1:
2:
x := Trunc(cos(DegToRad(45))*x1-sin(DegToRad(45))*y1)+200;
y := Trunc(sin(DegToRad(45))*x1+cos(DegToRad(45))*y1)+200;


auch ohne das trunc ganzzahlige Werte kriegen.

Drehst du aber um 45 Grad landen deine Punkte nicht genau auf neuen Pixeln und der trunc Befehl liefert dir nur gerundete Werte mit denen du später aber weiterrechnest.

Lösungsansatz:
Du musst dein Programm so umschreiben, dass es im Hintergrund immer mit den exacten Werten rechnet (also das trunc wegnehmen und real-Zahlen Speichern), erst in deiner Prozedur rechteck werden diese Werte mithilfe von trunc oder round fürs zeichnen gerundet.
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Fr 16.05.08 12:22 
Oder (IMHO besser) Du drehst immer nur die originalen Koordinaten des Polygons, nicht die schon mal gedrehten. Auch ein Fließkomma-Wert kann bei zig-Maligen drehen ungenau werden, so dass das Rechteck irgendwann keins mehr ist.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Fr 16.05.08 12:54 
Also, ich hab es jetzt mal so probiert wie Dunkel es mir vorgeschlagen hat weil es einfach schneller zu realisieren war...
Meint ihr, dass das jetzt besser ist?
Einloggen, um Attachments anzusehen!
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 16.05.08 12:59 
Vielleicht hilft dir das: wiki.delphigl.com/in...eispiel_4_-_Rotation
Der Trick ist, das ungedrehte Original zu speichern und immer nur dann zu drehen wenn es nötig ist. (Sollte man machen wenn es die Performance zulässt. Rundungsfehler gibt es aber immer, jedoch sollte das mit der verlinkten Rotationsmatrix ganz gut klappen)
Die Vertices sind relativ zu einem Punkt im Polygon angegeben, das müsstest du noch beachten.

mfg
g1o2k4
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Fr 16.05.08 13:07 
ich hatte da auch mal was zu...
allerdings war das etwas komisch. wenn man es ganz langsam rotieren lässt und mal "repaint" ausschaltet kommt da fast nen rechteck raus...weiß nicht obs an den rundungsfehlern liegt - vermutlich schon.

vielleicht kannste damit was anfangen.
Einloggen, um Attachments anzusehen!