Draw a sphere: Difference between revisions

m
m (bugfix: divide by 0 crash when r=0)
m (→‎{{header|Sidef}}: updated code)
Line 4,033:
Produces a PGM image.
<lang ruby>func normalize (vec) { vec »/» (vec »*« vec -> sum.sqrt) }
func dot (x, y) { -(x »*« y -> sum) ^`max^` 0 }
 
var x = var y = 255
Line 4,049:
var vector = normalize([x, y, (r2 - x2 - y2).sqrt])
var intensity = (dot(light, vector)**k + ambient)
var pixel = (0 ^`max^` (intensity*depth -> int) ^`min^` depth)
pixels << pixel
}
Line 4,063:
 
out.say("P5\n#{x} #{y}\n#{depth}") # .pgm header
out.writeprint(draw_sphere((x-1)/2, .9, .2).map{.chr}.join)
out.close</lang>
 
2,747

edits