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;
}
}