39 FreeBASIC - Фракталы. строим квадрат Серпинсого
Квадрат Серпинского, или его ещё называют ковёр Серпинского, построить очень просто - квадрат делится на 9 квадратов(каждая сторона делится на три части) И вырезается средняя часть. Это же самое правило применяют к оставшимся 8 квадратам и и т.д.
Зададим квадрат стороной а и координатами его середины (x,y). Теперь вырежем(закрасим) средний квадрат:
сторона квадрата - а, значит координаты вершин для оператора line рисующего квадрат буду
(x-a/2,y-a/2) и (x+a/2,y+a/2). Чтобы квадрат нарисовался закрашенным указывем BF
line (x-a/2,y-a/2)-(x+a/2, y+a/2),0,BF
а оставшиеся восемь квадратов обработаем рекурсивно по такому же алгоритму.
ScreenRes 1024,768
paint(1,1),15
sub Serp(byval x as double, byval y as double, byval a as double, byval n as integer)
line (x-a/2,y-a/2)-(x+a/2, y+a/2),0,BF
if n>1 then
Serp(x-a, y-a, a/3, n-1)
Serp(x , y-a, a/3, n-1)
Serp(x+a, y-a, a/3, n-1)
Serp(x+a, y , a/3, n-1)
Serp(x+a, y+a, a/3, n-1)
Serp(x , y+a, a/3, n-1)
Serp(x-a, y+a, a/3, n-1)
Serp(x-a, y , a/3, n-1)
end if
end sub
Serp(512, 384, 240, 4)
sleep
n=6
n=5
n=4
Больше ничего интересного и не придумаешь...
Разве что сдалать анимацию...
Сначала рисуем при n=1, потом при n=2 и т.д. до 6. А почему не до 7?
ScreenRes 1024,768
dim as integer i
paint(1,1),15
for i=1 to 6
Serp(512, 384, 240, i)
sleep 1500
next i
cls
sleep