| 三角函数を使い,放射線を描画。
|
import java.applet.*;
import java.awt.*;
public class ja04b extends Applet implements Runnable
{
int xpos1,ypos1,xpos2,ypos2,xpos3,ypos3; //放射線の先端のxy座標
int r = 60; //放射線の半径
int rd = 0; //半径の増減量
double n = 0; //回転する放射線で使用するラジアン値の変化量
boolean b = true; //拡大縮小する放射線で使用するフラグ
Image of; //オフスクリーン用のイメージ
Graphics ofg; //オフスクリーン用のイメージのGraphicsオブジェクト
Thread td; //スレッド
public void init(){
setBackground(Color.white); //Appletの背景色を白色に設定
of = createImage(size().width,size().height); //オフスクリーン用のイメージの作成
ofg = of.getGraphics(); //オフスクリーン用のイメージのGraphicsオブジェクトを取得
}
public void paint(Graphics g){
ofg.setColor(this.getBackground()); //全体を背景色で塗り潰す
ofg.fillRect(0,0,size().width,size().height);
for(int i = 0;i < 24;i++){ //1番目の放射線(固定)
ofg.setColor(new Color(i * 8,i * 3,i * 10));
xpos1 = (int)(70 + (r *Math.sin(2 * Math.PI * i / 24)));
ypos1 = (int)(70 + (r *Math.cos(2 * Math.PI * i / 24)));
ofg.drawLine(70,70,xpos1,ypos1); //オフスクリーンに描画
}
for(int i = 0;i < 18;i++){ //2番目の放射線(回転)
//スレッドで,ラジアン値をn増加さすことで回転さす
ofg.setColor(new Color(i * 13,i * 3,i * 10));
xpos2 = (int)(200 + (r *Math.sin(2 * Math.PI * i / 18 + n)));
ypos2 = (int)(70 + (r *Math.cos(2 * Math.PI * i / 18 + n)));
ofg.drawLine(200,70,xpos2,ypos2); //オフスクリーンに描画
}
for(int i = 0;i < 18;i++){ //3番目の放射線(拡大縮小)
//スレッドで,半径をrd分増減することで拡大縮小さす。
ofg.setColor(new Color(i * 3,i * 13,i * 8));
xpos3 = (int)(330 + ((20 + rd) *Math.sin(2 * Math.PI * i / 18)));
ypos3 = (int)(70 + ((20 + rd) *Math.cos(2 * Math.PI * i / 18)));
ofg.drawLine(330,70,xpos3,ypos3); //オフスクリーンに描画
}
g.drawImage(of,0,0,this); //オフスクリーンイメージを画面に描画
}
public void update(Graphics g){
paint(g);
}
public void start(){
if(td == null){
td = new Thread(this);
td.start();
}
}
public void run(){
while(true){
try{
n += 0.12; //2番目の放射線で,増加さすラジアン値
if(n > 6.28)n = 0; //1周分増加すると,0に戻す
if(b){ //3番目の放射線のフラグ
rd += 5; //半径を5ずつ増加さす
if(rd > 40)b = false;
}else{ //半径が60を超えると,5ずつ減少さす
rd -= 5;
if(rd < 0)b = true;
}
repaint();
Thread.sleep(300); //0.3秒間隔でスレッドを実行
}catch(InterruptedException e){stop();}
}
}
public void stop(){
if(td != null){
td.stop();
td = null;
}
}
}
末尾