Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
58
Task/Draw-a-sphere/Turing/draw-a-sphere.turing
Normal file
58
Task/Draw-a-sphere/Turing/draw-a-sphere.turing
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
% Draw a sphere in ASCII art in Turing
|
||||
|
||||
% Light intensity to character map
|
||||
const shades := '.:!*oe&#%@'
|
||||
const maxShades := length (shades)
|
||||
|
||||
% Absolute dot product of x and y
|
||||
function dot (x, y : array 1 .. 3 of real) : real
|
||||
result abs (x(1) * y(1) + x(2) * y(2) + x(3) * y(3))
|
||||
end dot
|
||||
|
||||
% Vector normalization
|
||||
procedure normalize (var v : array 1 .. 3 of real)
|
||||
const norm := sqrt (v(1)**2 + v(2)**2 + v(3)**2)
|
||||
for i : 1 .. 3
|
||||
v(i) := v(i) / norm
|
||||
end for
|
||||
end normalize
|
||||
|
||||
% Draws a sphere using ASCII art
|
||||
procedure drawSphere (radius : real, k : int, lightsource : array 1 .. 3 of real, brightness : real)
|
||||
const diameter := 2.0 * radius
|
||||
for i : floor (-radius) .. ceil (radius)
|
||||
var x := i + 0.5
|
||||
for j : floor (-diameter) .. ceil (diameter)
|
||||
var y := j / 2 + 0.5
|
||||
|
||||
if x**2 + y**2 <= radius**2 then
|
||||
var vec : array 1 .. 3 of real
|
||||
vec(1) := x; vec(2) := y; vec(3) := sqrt (radius**2 - x**2 - y**2)
|
||||
normalize (vec)
|
||||
|
||||
const b := dot (lightsource, vec) ** k + brightness
|
||||
var intensity := round ((1 - b) * maxShades)
|
||||
|
||||
if intensity < 1 then
|
||||
intensity := 1
|
||||
elsif intensity > maxShades then
|
||||
intensity := maxShades
|
||||
end if
|
||||
|
||||
put shades (intensity) ..
|
||||
else
|
||||
put ' ' ..
|
||||
end if
|
||||
end for
|
||||
put ""
|
||||
end for
|
||||
end drawSphere
|
||||
|
||||
% Light source
|
||||
var lightsource : array 1 .. 3 of real := init (30, 30, -59)
|
||||
normalize (lightsource)
|
||||
const brightness := 0.1
|
||||
|
||||
% Draw some spheres
|
||||
drawSphere (20, 4, lightsource, brightness)
|
||||
drawSphere (15, 10, lightsource, brightness)
|
||||
Loading…
Add table
Add a link
Reference in a new issue