/*------------ ex12_1.java 図形:回転 -------------*/ /* */ import java.applet.*; import java.awt.*; public class ex12_1 extends Applet { public void paint(Graphics g) { int x1 = 50, y1 = 150, x2 = 250, y2 = 150; int red = 0, grn = 255, blu = 0, n = 20; double theta = Math.PI / n; // for文n回の繰り返しで半回転するように角度設定(単位:ラジアン) for (int i = 0; i < n; i++) { g.setColor(new Color(red, grn, blu)); g.drawLine(x1, y1, x2, y2); x1 = rotate_x(x1, y1, theta); y1 = rotate_y(x1, y1, theta); // 注:x1は回転後の座標なので,ちょっとずれる(内側に縮むように回転) x2 = rotate_x(x2, y2, theta); y2 = rotate_y(x2, y2, theta); // 注:x2は回転後の座標なので,ちょっとずれる(内側に縮むように回転) red += 0; grn -= 255/n; blu += 255/n; } } // 点(x,y)をangleラジアン回転し,回転後のx座標を返却 private int rotate_x(int x, int y, double angle) { x -= 150; y -= 150; // 原点中心になるように平行移動 x = (int)(x * Math.cos(angle) - y * Math.sin(angle)); // x座標の回転 x += 150; y += 150; // 平行移動分を戻す return x; } // 点(x,y)をangleラジアン回転し,回転後のy座標を返却 private int rotate_y(int x, int y, double angle) { x -= 150; y -= 150; // 原点中心になるように平行移動 y = (int)(x * Math.sin(angle) + y * Math.cos(angle)); // y座標の回転 x += 150; y += 150; // 平行移動分を戻す return y; } }