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

программированиеfreebasicкомпьютерыsgfbsgpgобучение
25%
3
738
453.552 GOLOS
0
В избранное
Сергей
Кибернетик... а кто это? deals.weku.io/@sergiy, serey.io/@sergiy, whaleshares.io/@sergiy
738
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (3)
Сортировать по:
Сначала старые