/*----------------- ex12_1b.java 図形:矩形の回転 ------------------*/ /* */ import java.applet.*; import java.awt.*; public class ex12_1b extends Applet { public void paint(Graphics g) { int x[] = {100, 200, 200, 100}; int y[] = {120, 120, 290, 190}; int pt = 4; int red = 0, grn = 255, blu = 255, n = 20; double theta = 2*Math.PI / n; // 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 += 255/n; grn -= 255/n; blu += 0; } } // 点(x,y)をangleラジアン回転し,回転後のx座標を返却 private int rotate_x(int x, int y, double angle) { x -= 140; y -= 60; // 原点中心になるように平行移動 x = (int)(x * Math.cos(angle) - y * Math.sin(angle)); // x座標の回転 x += 140; y += 60; // 平行移動分を戻す return x; } // 点(x,y)をangleラジアン回転し,回転後のy座標を返却 private int rotate_y(int x, int y, double angle) { x -= 140; y -= 60; // 原点中心になるように平行移動 y = (int)(x * Math.sin(angle) + y * Math.cos(angle)); // y座標の回転 x += 140; y += 60; // 平行移動分を戻す return y; } }