Positive Werte für den Drehwinkel bewirken eine
Rotation gegen den Uhrzeigersinn.
Bei Wahl eines beliebigen Rotationszentrums
(Rx,Ry)
folgt für den Punkt P
/****************************************************************************************/ /* */ /* Skalieren und Rotieren eines Polygons */ /* Obacht: Da die Polygon-Koordinaten ganzzahlig sind, */ /* verstaerken sich die Rundungsfehler nach jeder Transformation */ /* */ /****************************************************************************************/ private static final double DEG_TO_RAD = Math.PI/180.0; // Umrechnung Grad in Bogenmass private void skalier_polygon( // skaliert ein Polygon Point[] points, // gespeichert im Array points int n, // mit n Eckpunkten double sx, // in x-Richtung um den Faktor sx double sy, // in y-Richtung um den Faktor sy Point z) // bezueglich des Punktes z { int i; for (i=0; i< n; i++) { points[i].x = (int)((points[i].x - z.x ) * sx + z.x + 0.5); points[i].y = (int)((points[i].y - z.y ) * sy + z.y + 0.5); } } private void rotate_polygon( // rotiert ein Polygon Point[] points, // gespeichert im Array points int n, // mit n Eckpunkten int g, // um einen Winkel von g Grad Point z) // bezueglich des Punktes z { int i; double beta = g * DEG_TO_RAD; // Winkel im Bogenmass Point P = new Point(); for (i=0; i < n; i++) { P.x = (int)((points[i].x - z.x ) * Math.cos( beta ) - (points[i].y - z.y ) * Math.sin( beta ) + z.x + 0.5); P.y = (int)((points[i].y - z.y ) * Math.cos( beta ) + (points[i].x - z.x ) * Math.sin( beta ) + z.y + 0.5); points[i].x = P.x; points[i].y = P.y; } } |