209 :
ランバート:
朝から頭の体操してます。
光が今ひとつだけど
レイトレっぽくなったのではないでしょうか?
でもオイラの頭じゃ7行は無理っス。
import java.awt.*;public class R extends Frame{class V{double x,y,z,r;V(double
a,double b,double c){x=a;y=b;z=c;}V(V a){x=a.x;y=a.y;z=a.z;}double c(V s){
return x*s.x+y*s.y+z*s.z;}void n(){r=Math.sqrt(x*x+y*y+z*z);x/=r;y/=r;z/=r;}}
static void main(String[]a){R r=new R();r.setSize(255,255);r.show();}public
void paint(Graphics g){for(int y=0;y<255;y++)for(int x=0;x<255;x++){V A=new
V(x-128,y-128,100);V B=new V(0,0,200);int c=L(A,B);g.setColor(new Color(c,c,c))
;g.drawLine(x,y+20,x,y+20);}}double a,b,c,d,R;int L(V A,V B){a=(new V(A)).c(A);
b=(new V(A)).c(B);c=(new V(B)).c(B)-10000;d=b*b-a*c;if(d>0){R=(-b+Math.sqrt(
d))/a;V N=new V(A.x*R,A.y*R,A.z*R);N.n();R=(N.x+N.y-N.z)/Math.sqrt(3);A.x-=B.x;
A.y-=B.y;A.z-=B.z;int h=(int)(((double)H(N,A))*R);return R>0?( h>0?h:(int)(R*
255)):30;}return F(A);}int H(V N,V A){a=-N.c(A);N.x=2*N.x*a+A.x;N.y=2*N.y*a+
A.y;N.z=2*N.z*a+A.z;return F(N);}int F(V A){a=A.x;b=10000-A.r;c=A.y==0?0:b/A.y;
return c>0?((((a*c>0?a*c+b/2:-a*c)%b)>b/2)^(((A.z*c+200)%b)>b/2)?100:200):0;}}