Rotation.java


Below is the syntax highlighted version of Rotation.java from §3.1 Using Data Types.


/******************************************************************************
 *  Compilation:  javac Rotation.java
 *  Execution:    java Rotation filename angle
 *
 *  Rotate image a given number of degrees counterclockwise.
 *
 *  % java Rotation baboon.jpg 30
 *
 *
 ******************************************************************************/

// import java.awt.Color;

public class Rotation {

    public static void main(String[] args) {
        Picture pic1 = new Picture(args[0]);
        pic1.show();
        int width  = pic1.width();
        int height = pic1.height();

        double angle = Math.toRadians(Double.parseDouble(args[1]));
        double sin = Math.sin(angle);
        double cos = Math.cos(angle);
        double x0 = 0.5 * (width  - 1);     // point to rotate about
        double y0 = 0.5 * (height - 1);     // center of image

        Picture pic2 = new Picture(width, height);

        // rotation
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                double a = x - x0;
                double b = y - y0;
                int xx = (int) (+a * cos - b * sin + x0);
                int yy = (int) (+a * sin + b * cos + y0);

                // plot pixel (x, y) the same color as (xx, yy) if it's in bounds
                if (xx >= 0 && xx < width && yy >= 0 && yy < height) {
                    pic2.set(x, y, pic1.get(xx, yy));
                }
            }
        }

        pic2.show();
    }



}


Copyright © 2000–2022, Robert Sedgewick and Kevin Wayne.
Last updated: Thu Aug 11 10:22:01 EDT 2022.