Koch curve: Difference between revisions

Content added Content deleted
(Forth (4tH) version added)
(→‎{{header|Lua}}: added Lua solution)
Line 1,394: Line 1,394:
</lang>
</lang>


=={{header|Lua}}==
Using the Bitmap class [[Bitmap#Lua|here]], with an ASCII pixel representation, then extending..
<lang lua>local cos, sin, floor, pi = math.cos, math.sin, math.floor, math.pi

function Bitmap:render()
for y = 1, self.height do
print(table.concat(self.pixels[y]))
end
end

function Bitmap:drawKochPath(path, x, y, angle, speed, color)
local rules = {
["+"] = function() angle = angle + pi/3 end,
["-"] = function() angle = angle - pi/3 end,
["F"] = function()
local nx, ny = x+speed*cos(angle), y+speed*sin(angle)
self:line(floor(x*2+0.5), floor(y+0.5), floor(nx*2+0.5), floor(ny+0.5), color)
x, y = nx, ny
end
}
path:gsub("(.)", function(c) rules[c]() end)
end

function LSystem(axiom, rules, reps)
for i = 1, reps do
axiom = axiom:gsub("(.)", function(c) return rules[c] or c end)
end
return axiom
end
function KochPath(reps) return LSystem("F--F--F--", { F = "F+F--F+F" }, reps) end

demos = {
{ n=0, w= 11, h= 6, x=1, y= 4 },
{ n=1, w= 22, h=14, x=1, y= 9 },
{ n=2, w= 60, h=34, x=1, y=24 },
{ n=3, w=168, h=96, x=1, y=71 }
}
for _,d in ipairs(demos) do
bitmap = Bitmap(d.w, d.h)
bitmap:clear(".")
bitmap:drawKochPath(KochPath(d.n), d.x, d.y, 0, 3, "@")
bitmap:render()
print()
end</lang>
{{out}}
<pre style="font-size:50%">...........
.....@.....
....@.@....
...@...@...
..@@@@@@@..
...........

......................
...........@..........
..........@.@.........
.........@...@........
..@@@@@@@.....@@@@@@@.
...@..............@...
....@@...........@....
....@.............@...
...@...............@..
..@@@@@@@.....@@@@@@@.
.........@...@........
..........@.@.........
...........@..........
......................

............................................................
.............................@@.............................
............................@..@............................
....................@@@@@@@@....@@@@@@@.....................
.....................@...............@......................
......................@.............@.......................
...........@@..........@...........@@..........@@...........
..........@..@........@..............@........@..@..........
..@@@@@@@@....@@@@@@@@................@@@@@@@@....@@@@@@@...
...@...................................................@....
....@.................................................@.....
.....@...............................................@......
....@.................................................@.....
...@...................................................@....
..@@@@@@@........................................@@@@@@@@...
.........@......................................@...........
..........@@...................................@............
..........@.....................................@...........
.........@.......................................@..........
..@@@@@@@.........................................@@@@@@@...
...@..................................................@.....
....@@...............................................@......
....@.................................................@.....
...@...................................................@....
..@@@@@@@.....@@@@@@@.................@@@@@@@.....@@@@@@@...
.........@...@.......@...............@.......@...@..........
..........@.@.........@.............@.........@.@...........
...........@...........@...........@@..........@............
......................@..............@......................
....................@@@@@@@.....@@@@@@@.....................
...........................@...@............................
............................@.@.............................
.............................@..............................
............................................................

........................................................................................................................................................................
...................................................................................@@...................................................................................
..................................................................................@..@..................................................................................
..........................................................................@@@@@@@@....@@@@@@@...........................................................................
...........................................................................@...............@............................................................................
............................................................................@.............@.............................................................................
.................................................................@...........@...........@...........@..................................................................
................................................................@.@.........@.............@.........@.@.................................................................
...............................................................@...@.......@...............@.......@...@................................................................
........................................................@@@@@@@.....@@@@@@@.................@@@@@@@.....@@@@@@@.........................................................
.........................................................@..................................................@...........................................................
..........................................................@@...............................................@............................................................
..........................................................@.................................................@...........................................................
.........................................................@...................................................@..........................................................
........................................................@@@@@@@........................................@@@@@@@@.........................................................
...............................................................@......................................@.................................................................
.............................@..................................@@...................................@...................................@..............................
............................@.@.................................@.....................................@.................................@.@.............................
...........................@...@...............................@.......................................@...............................@...@............................
....................@@@@@@@.....@@@@@@@.................@@@@@@@.........................................@@@@@@@.................@@@@@@@.....@@@@@@@.....................
.....................@...............@...................@...................................................@...................@...............@......................
......................@.............@.....................@.................................................@.....................@.............@.......................
...........@@..........@...........@@..........@@..........@...............................................@@..........@@..........@...........@@..........@@...........
..........@..@........@..............@........@..@........@..................................................@........@..@........@..............@........@..@..........
..@@@@@@@@....@@@@@@@@................@@@@@@@@....@@@@@@@@....................................................@@@@@@@@....@@@@@@@@................@@@@@@@@....@@@@@@@...
...@...............................................................................................................................................................@....
....@.............................................................................................................................................................@.....
.....@...........................................................................................................................................................@@.....
....@..............................................................................................................................................................@....
..@@@@@@@.....................................................................................................................................................@@@@@@@...
.........@...................................................................................................................................................@..........
..........@.................................................................................................................................................@...........
...........@...............................................................................................................................................@............
..........@.................................................................................................................................................@...........
.........@...................................................................................................................................................@..........
..@@@@@@@.....................................................................................................................................................@@@@@@@...
...@..............................................................................................................................................................@.....
....@@...........................................................................................................................................................@......
....@.............................................................................................................................................................@.....
...@...............................................................................................................................................................@....
..@@@@@@@....@@@@@@@@............................................................................................................................@@@@@@@@....@@@@@@@@...
.........@..@........@..........................................................................................................................@........@..@...........
..........@@..........@@.......................................................................................................................@..........@@............
......................@.........................................................................................................................@.......................
.....................@...........................................................................................................................@......................
....................@@@@@@@.................................................................................................................@@@@@@@.....................
...........................@...............................................................................................................@............................
............................@.............................................................................................................@.............................
.............................@...........................................................................................................@@.............................
............................@..............................................................................................................@............................
....................@@@@@@@@................................................................................................................@@@@@@@.....................
.....................@...........................................................................................................................@......................
......................@.........................................................................................................................@.......................
...........@@..........@.......................................................................................................................@@..........@@...........
..........@..@........@..........................................................................................................................@........@..@..........
..@@@@@@@@....@@@@@@@@............................................................................................................................@@@@@@@@....@@@@@@@...
...@...............................................................................................................................................................@....
....@.............................................................................................................................................................@.....
.....@...........................................................................................................................................................@......
....@.............................................................................................................................................................@.....
...@...............................................................................................................................................................@....
..@@@@@@@....................................................................................................................................................@@@@@@@@...
.........@..................................................................................................................................................@...........
..........@@...............................................................................................................................................@............
..........@.................................................................................................................................................@...........
.........@...................................................................................................................................................@..........
..@@@@@@@.....................................................................................................................................................@@@@@@@...
...@..............................................................................................................................................................@.....
....@@...........................................................................................................................................................@......
....@.............................................................................................................................................................@.....
...@...............................................................................................................................................................@....
..@@@@@@@.....@@@@@@@.................@@@@@@@.....@@@@@@@.....................................................@@@@@@@.....@@@@@@@.................@@@@@@@.....@@@@@@@...
.........@...@.......@...............@.......@...@.......@...................................................@.......@...@.......@...............@.......@...@..........
..........@.@.........@.............@.........@.@.........@.................................................@.........@.@.........@.............@.........@.@...........
...........@...........@...........@@..........@...........@...............................................@@..........@...........@...........@@..........@............
......................@..............@....................@..................................................@....................@..............@......................
....................@@@@@@@.....@@@@@@@.................@@@@@@@.........................................@@@@@@@.................@@@@@@@.....@@@@@@@.....................
...........................@...@...............................@.......................................@...............................@...@............................
............................@.@.................................@.....................................@.................................@.@.............................
.............................@...................................@...................................@@..................................@..............................
................................................................@......................................@................................................................
........................................................@@@@@@@@........................................@@@@@@@.........................................................
.........................................................@...................................................@..........................................................
..........................................................@.................................................@...........................................................
...........................................................@...............................................@............................................................
..........................................................@.................................................@...........................................................
.........................................................@...................................................@..........................................................
........................................................@@@@@@@....@@@@@@@@................@@@@@@@@....@@@@@@@@.........................................................
...............................................................@..@........@..............@........@..@.................................................................
................................................................@@..........@@...........@..........@@..................................................................
............................................................................@.............@.............................................................................
...........................................................................@...............@............................................................................
..........................................................................@@@@@@@....@@@@@@@@...........................................................................
.................................................................................@..@...................................................................................
..................................................................................@@....................................................................................
........................................................................................................................................................................</pre>


=={{header|Mathematica}}/{{header|Wolfram Language}}==
=={{header|Mathematica}}/{{header|Wolfram Language}}==