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