Typischer Fall von Rundungsfehler.
Drehst du um 90 Grad landet jeder Pixel genau auf einem neuen Pixel, du würdest also hier
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.