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}}== |