/*----------------- ex12_1c.java 図形:★の回転 ------------------*/ /* */ import java.applet.*; import java.awt.*; public class ex12_1c extends Applet { public void paint(Graphics g) { int x[] = {100, 200, 120, 150, 180}; int y[] = {200, 200, 270, 170, 270}; int pt = 5; int red = 255, grn = 125, blu = 255, n = 60; double theta = Math.PI / n * 4; // for文n回の繰り返しで一回転するように角度設定(単位:ラジアン) for (int i = 0; i < n; i++) { g.setColor(new Color(red, grn, blu)); g.drawPolygon(x, y, pt); for (int j = 0; j < pt; j++) { x[j] = rotate_x(x[j], y[j], theta); y[j] = rotate_y(x[j], y[j], theta); // 注:x1は回転後の座標なので,ちょっとずれる(内側に縮むように回転) } red -= 125/n; grn += 125/n; blu -= 125/n; } } // 点(x,y)をangleラジアン回転し,回転後のx座標を返却 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座標の回転 x += 150; y += 120; // 平行移動分を戻す return x; } // 点(x,y)をangleラジアン回転し,回転後のy座標を返却 private int rotate_y(int x, int y, double angle) { x -= 150; y -= 100; // 原点中心になるように平行移動 y = (int)(x * Math.sin(angle) + y * Math.cos(angle)); // y座標の回転 x += 150; y += 100; // 平行移動分を戻す return y; } }