2000年6月13日更新(新規作成)
関谷トップページへ
CGトップページへ
戻る(Java6章ページへ)
ボール状の点描(光源のパラメータa,b,cをコマンドラインで受け取る)
// GraphicsE3p.java ボール状の点描(中山茂、Java2グラフィックスプログラミング入門、技報堂出版、1999、pp.124-125)
// (光源のパラメータa,b,cをコマンドラインで受け取る。 2000.6.13 sekiya
import java.awt.*;
import java.awt.event.*;
public class GraphicsE3p extends Frame {
static double a=-0.2,b=-0.2,c=1.0; // static変数に変える
public static void main(String ar[]) {
Frame f=new GraphicsE3p();
f.setTitle("Javaピクセル(カラーボール)");
f.setSize(640,400);
f.setBackground(Color.blue);
f.setVisible(true);
int count = ar.length; // java GraphicsE3p 数値3個まで(a b c)
if(count > 0) {
a = Double.parseDouble(ar[0]);
if(count > 1) {
b = Double.parseDouble(ar[1]);
if(count > 2) {
c = Double.parseDouble(ar[2]);
}
}
}
}
GraphicsE3p(){ addWindowListener(new WinAdapter()); }
class WinAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) { System.exit(0); }
}
public void paint(Graphics g) {
fireball(g,100,100,50,'r');
fireball(g,200,200,100,'g');
fireball(g,400,200,150,'w');
fireball(g,550,300,50,'y');
}
public void fireball(Graphics g, int x0, int y0, int r, char color)
{
int xi,yi,dy,dx,dxy,z,bw, xmax, xmin, ymax, ymin;
double d,m=13.7;
g.setColor(new Color(0,0,0));
d=Math.sqrt(Math.pow(a,2.0)+Math.pow(b,2.0)+Math.pow(c,2.0));
a*=m/d;
b*=m/d;
c*=m/d;
xmax=x0+r;
xmin=x0-r;
ymax=y0+r;
ymin=y0-r;
for(yi=ymin;yi<=ymax;yi++){
for(xi=xmin ;xi<=xmax;xi++){
dx=xi-x0;
dy=yi-y0;
dxy=(int)(Math.sqrt(Math.pow(dx,2.0)+Math.pow(dy,2.0)));
if(dxy<=r){
z=(int)Math.sqrt(r*r-Math.pow(dxy,2.0));
bw=(int)((dx*a+dy*b+z*c)/r*18);
if(bw<0) bw=0;
if(color=='r') g.setColor(new Color(bw,0,0));
else if(color=='g') g.setColor(new Color(0,bw,0));
else if(color=='y') g.setColor(new Color(bw,bw,0));
else g.setColor(new Color(bw,bw,bw));
g.drawLine(xi,yi,xi,yi);
}
}
}
}
}