Ex13_2



/*----------
 Ex13_2.java
 図形の回転
 -----------*/
package jp_bunkyo;

import java.applet.*;
import java.awt.*;

public class Ex13_2 extends Applet {
	int x[] = {100, 200, 120, 150, 180};	// 星の初期 x座標
	int y[] = {200, 200, 270, 170, 270};	// 星の初期 y座標
	int pt = 5;								// 多角形を描く点の数
	int red, grn, blu;						// 3色用
	int n = 60;								// 回転させて描画する回数用
	double theta = Math.PI / n * 4;			// 回転角(単位:ラジアン)

	public void init() {		// 初期化メソッド
		this.setSize(300, 300);	// キャンバスサイズを設定
		red = 255;				// 初期色:赤
		grn = 125;				// 初期色:緑
		blu = 125;				// 初期色:青
	}

	public void paint(Graphics g) {
		for (int i = 0; i < n; i++) {
			g.setColor(new Color(red, grn, blu));	// 3色混ぜて色を作成・設定
			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座標は回転後なので,内側に縮む様になる)
			}
			red -= 125/n;	grn += 125/n;	blu -= 125/n;
		}
	}

	private int rotate_x(int x, int y, double angle) {	// x座標を angle角 回転させるメソッド
		x -= 150;	y -= 120;									// 原点中心とするよう平行移動
		x = (int)(x * Math.cos(angle) - y * Math.sin(angle));	// x座標の回転を実施
		x += 150;	y += 120;									// 平行移動分を戻す
		return x;												// 回転後の x座標を返却
	}

	private int rotate_y(int x, int y, double angle) {	// y座標を angle角 回転させるメソッド
		x -= 150;	y -= 100;									// 原点中心とするよう平行移動
		y = (int)(x * Math.sin(angle) + y * Math.cos(angle));	// y座標の回転を実施
		x += 150;	y += 100;									// 平行移動分を戻す
		return y;												// 回転後の y座標を返却
	}
}