38 lines
661 B
Text
38 lines
661 B
Text
w:400; h:300; r:150; l:-0.5 0.7 0.5
|
|
sqrt0:{$[x>0;sqrt x;0]};
|
|
|
|
/ get x,y,z position of point on sphere given x,y,r
|
|
|
|
z:{[x;y;r]sqrt0((r*r)-((x*x)+(y*y)))};
|
|
|
|
/ get diffused light at point on sphere
|
|
|
|
is:{[x;y;r]
|
|
z0:z[x;y;r];
|
|
s:(x;y;z0)%r;
|
|
$[z0>0;i:0.5*1+(+/)(s*l);i:0];
|
|
i};
|
|
|
|
/ get pixel value at given image position
|
|
|
|
fcn:{[xpx;ypx]
|
|
x:xpx-w%2;
|
|
y:ypx-h%2;
|
|
z1:z[x;y;r];
|
|
x2:x+190;
|
|
z2:170-z[x2;y;r];
|
|
$[(r*r)<((x*x)+(y*y));
|
|
$[y>-50;
|
|
i:3#0;
|
|
i:200 100 50];
|
|
$[z2>z1;
|
|
i:3#is[x;y;r]*140;
|
|
i:3#is[(-1*x2);(-1*y);r]*120]
|
|
];
|
|
"i"$i};
|
|
|
|
/ do it ...
|
|
|
|
\l bmp.q
|
|
fn:`:demo.bmp;
|
|
writebmp[w;h;fcn;fn];
|