Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
59
Task/Draw-a-sphere/AWK/draw-a-sphere.awk
Normal file
59
Task/Draw-a-sphere/AWK/draw-a-sphere.awk
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
# syntax: GAWK -f DRAW_A_SPHERE.AWK
|
||||
# converted from VBSCRIPT
|
||||
BEGIN {
|
||||
draw_sphere(20,4,0.1)
|
||||
draw_sphere(10,2,0.4)
|
||||
exit(0)
|
||||
}
|
||||
function draw_sphere(radius,k,ambient, b,i,intensity,j,leng_shades,light,line,shades,vec,x,y) {
|
||||
leng_shades = split0(".:!*oe&#%@",shades,"")
|
||||
split("30,30,-50",light,",")
|
||||
normalize(light)
|
||||
for (i=int(-radius); i<=ceil(radius); i++) {
|
||||
x = i + 0.5
|
||||
line = ""
|
||||
for (j=int(-2*radius); j<=ceil(2*radius); j++) {
|
||||
y = j / 2 + 0.5
|
||||
if (x*x + y*y <= radius*radius) {
|
||||
vec[1] = x
|
||||
vec[2] = y
|
||||
vec[3] = sqrt(radius*radius - x*x - y*y)
|
||||
normalize(vec)
|
||||
b = dot(light,vec) ^ k + ambient
|
||||
intensity = int((1-b) * leng_shades)
|
||||
if (intensity < 0) {
|
||||
intensity = 0
|
||||
}
|
||||
if (intensity >= leng_shades) {
|
||||
intensity = leng_shades
|
||||
}
|
||||
line = line shades[intensity]
|
||||
}
|
||||
else {
|
||||
line = line " "
|
||||
}
|
||||
}
|
||||
printf("%s\n",line)
|
||||
}
|
||||
}
|
||||
function ceil(x, tmp) {
|
||||
tmp = int(x)
|
||||
return (tmp != x) ? tmp+1 : tmp
|
||||
}
|
||||
function dot(x,y, tmp) {
|
||||
tmp = x[1]*y[1] + x[2]*y[2] + x[3]*y[3]
|
||||
return (tmp < 0) ? -tmp : 0
|
||||
}
|
||||
function normalize(v, tmp) {
|
||||
tmp = sqrt(v[1]*v[1] + v[2]*v[2] + v[3]*v[3])
|
||||
v[1] /= tmp
|
||||
v[2] /= tmp
|
||||
v[3] /= tmp
|
||||
}
|
||||
function split0(str,array,fs, arr,i,n) { # same as split except indices start at zero
|
||||
n = split(str,arr,fs)
|
||||
for (i=1; i<=n; i++) {
|
||||
array[i-1] = arr[i]
|
||||
}
|
||||
return(n)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue