RosettaCodeData/Task/Peripheral-drift-illusion/Pluto/peripheral-drift-illusion.pluto
2026-04-30 12:34:36 -04:00

55 lines
1.6 KiB
Text

require "bitmap"
-- Signifies the white edges on the blue squares.
local LT = 0
local TR = 1
local RB = 2
local BL = 3
local edges = {
{LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL, RB},
{LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL},
{TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL},
{TR, TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT},
{RB, TR, TR, LT, LT, BL, BL, RB, RB, TR, TR, LT},
{RB, RB, TR, TR, LT, LT, BL, BL, RB, RB, TR, TR},
{BL, RB, RB, TR, TR, LT, LT, BL, BL, RB, RB, TR},
{BL, BL, RB, RB, TR, TR, LT, LT, BL, BL, RB, RB},
{LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL, RB},
{LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL},
{TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL},
{TR, TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT}
}
local light_olive = bitmap.rgbColor(0xd3, 0xd0, 0x04)
local pale_blue = bitmap.rgbColor(0x32, 0x50, 0xff)
local W = color.white
local B = color.black
local colors = {
{W, B, B, W},
{W, W, B, B},
{B, W, W, B},
{B, B, W, W}
}
local bmp = bitmap.of(1000, 1000, light_olive, "Peripheral_drift_illusion")
local function draw_edge(px, py, edge)
local c = colors[edge + 1]
bmp:line(px, py, px + 46, py, c[1], 4)
bmp:line(px + 46, py, px + 46, py + 46, c[2], 4)
bmp:line(px, py + 46, px + 46, py + 46, c[3], 4)
bmp:line(px, py + 46, px, py, c[4], 4)
end
for x = 0, 11 do
local px = 90 + x * 70
for y = 0, 11 do
local py = 90 + y * 70
bmp:rectangle(px, py, 50, 50, pale_blue)
draw_edge(px, py, edges[y + 1][x + 1])
end
end
bmp:view(false, "", "", true)