Ex12_2



/*----------
 Ex12_3.java
 図形の回転
 -----------*/
import java.applet.*;
import java.awt.*;

public class Ex12_2 extends Applet {
	int x[] = {100, 200, 120, 150, 180};	// 多角形の x座標(初期位置)
	int y[] = {200, 200, 270, 170, 270};	// 多角形の y座標(初期位置)
	int pt = 5;								// 多角形の座標点数
	int rr, gg, bb;				// 色設定用(rr,gg,bb)
	int n = 60;							// 回転数 n
	double theta = Math.PI / n * 4;	// 多角形の回転角 4π/n ラジアン

	public void init() {		// 初期設定 initialize
		this.setSize(300, 300);		// Applet の描画画面サイズ設定
		rr = 255;	// 赤色光
		gg = 125;	// 緑色光
		bb = 125;	// 青色光
	}

	public void paint(Graphics g) {
		for (int i=0; i<n; i++) {		// n回繰り返し描画
			g.setColor(new Color(rr,gg,bb));	// 色作成・設定
			g.drawPolygon(x, y, pt);	// 多角形描画

			for (int j=0; j<pt; j++) {
				x[j] = rotate_x(x[j], y[j], theta);	// x座標回転
				y[j] = rotate_y(x[j], y[j], theta);	// y座標回転(注:x座標回転後なので,内側に縮むようになる)
			}

			rr -= 125/n;	// 赤色変更
			gg += 125/n;	// 緑色変更
			bb -= 125/n;	// 青色変更
		}

	}

	// x座標の angle角回転メソッド
	private int rotate_x(int x, int y, double angle) {
		x -= 150;	y -= 120;		// 中心角を原点へ移動
		x = (int)(x * Math.cos(angle) - y * Math.sin(angle));	// 回転
		x += 150;	y += 120;		// 中心角を戻す
		return x;
	}

	// y座標の angle角回転メソッド
	private int rotate_y(int x, int y, double angle) {
		x -= 150;	y -= 120;		// 中心角を原点へ移動
		y = (int)(x * Math.sin(angle) + y * Math.cos(angle));	// 回転
		x += 150;	y += 120;		// 中心角を戻す
		return y;
	}

}