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座標を返却
}
}