RosettaCodeData/Task/Kronecker-product-based-fractals/Lua/kronecker-product-based-fractals.lua
2023-07-01 13:44:08 -04:00

52 lines
1.5 KiB
Lua

function prod( a, b )
local rt, l = {}, 1
for m = 1, #a do
for p = 1, #b do
rt[l] = {}
for n = 1, #a[m] do
for q = 1, #b[p] do
table.insert( rt[l], a[m][n] * b[p][q] )
end
end
l = l + 1
end
end
return rt
end
function love.load()
wid, hei = love.graphics.getWidth(), love.graphics.getHeight()
canvas = love.graphics.newCanvas( wid, hei )
mA = { {0,1,0}, {1,1,1}, {0,1,0} }; mB = { {1,0,1}, {0,1,0}, {1,0,1} }
mC = { {1,1,1}, {1,0,1}, {1,1,1} }; mD = { {1,1,1}, {0,1,0}, {1,1,1} }
end
function drawFractals( m )
love.graphics.setCanvas( canvas )
love.graphics.clear()
love.graphics.setColor( 255, 255, 255 )
for j = 1, #m do
for i = 1, #m[j] do
if m[i][j] == 1 then
love.graphics.points( i * .1, j * .1 )
end
end
end
love.graphics.setCanvas()
end
function love.keypressed( key, scancode, isrepeat )
local t = {}
if key == "a" then
print( "Build Vicsek fractal I" ); t = mA
elseif key == "b" then
print( "Build Vicsek fractal II" ); t = mB
elseif key == "c" then
print( "Sierpinski carpet fractal" ); t = mC
elseif key == "d" then
print( "Build 'H' fractal" ); t = mD
else return
end
for i = 1, 3 do t = prod( t, t ) end
drawFractals( t )
end
function love.draw()
love.graphics.draw( canvas )
end