prev up inhalt next


6.3 Rotation

Drehung des Objekts bzgl. eines Fixpunktes um einen Winkel .
Es liege der Fixpunkt im Ursprung.
Es gilt der Winkelsummensatz






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

1.
Translation um (- Rx, - Ry) liefert P1
2.
Rotation bzgl. Ursprung um Winkel liefert P2
3.
Translation um (Rx,Ry) liefert P3 = P'
Beispiel für = 90 o :


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


prev up inhalt next