Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
sergiy
5 лет назад

38 FreeBASIC. Рисуем фрактал дерево Пифагора

Упомянутое в прошлом уроке дерево Пифагора это уже вариация, а само же дерево выглядит вот-так.

Пифагор фракталов не строил)), но он доказал "свою" теорему построив на стронах прямоугольного треугольника квадраты. Википедия говорит, что "Впервые дерево Пифагора построил А. Е. Босман (1891—1961) во время Второй мировой войны, используя обычную чертёжную линейку."

И выглядит оно вот так:

Если же треугольник не равнокатетный не равнобедренный, то дерево будет такого вида

и называется дерево обдуваемое ветром.

Если же рисовать изображать только отрезки, которые соединяют центры треугольников, то получается дерево которое называют обнаженное дерево Пифагора. Которое мы и строили в прошлый раз. Есть так же его вариант обдуваемый ветром.

Сегодня построим классическое дерево Пифагора.

Равнобедренный треугольник, на кождой стороне которого построен квадрат. На стороне квадара, как гипотенузе, построим ещё по одному прямоугольному треугольнику, на катетах которых построим квадраты. И так далее.

Попробуем обойтись без формул вращения))

Дан исходный квадрат: ABCD - A(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4)

Построим на катетах треугольника AOB квадраты AEFO и BOGH.

A середина для DF(и B середина GC)
x1=(x4+x6)/2
y1=(y4+y6)/2

отсюда найдём x6 и y6:

x6=2x1+x4
y6=2
y1+y4

Нашли точку F(x6,y6)
аналогично - G(x7,y7)

x7=2x2+x3
y7=2
y2+y3

Теперь найдём координаты точки O(x9,y9) середина отрезка FB:

x9 = (x6 + x2) / 2
y9 = (y6 + y2) / 2

Далее,

J(x10,y10) середина FA.

x10 = (x6+x1)/2 y10 = (y6+y1)/2

и J также середина OE

x10 = (x5+x9)/2
y10 = (y5+y9)/2

Выходит
x6+x1=x5+x9

и x5 = x6+x1 - x9

и для y:

y5 = y6+y1 - y9

Аналогично и для точки Н(x8,y8)

x8=x7+x2-x9
y8=y7+y2-y9

Один проход рисует верно, а второй проход нет. Наверное и здесь без формул вращения не обойтись(((

Посмотрев ещё раз на код... я подумал, а можно ведь сделать поворот по иному)))

Можно рисовать квадрат по иному... квадрат-то всё равно как рисовать, а вот для вызова рекурсивной функции порядок и имеет значения. Будем рисовать квадраты так: EFOA и GHBO.

dim k as double
sub YY(byval x1 as double, byval y1 as double, byval x2 as double, byval y2 as double,_
    byval x3 as double, byval y3 as double, byval x4 as double, byval y4 as double, byval n as integer)
    
    dim  as double x5,x6,x7,x8,x9,x10,x11,_
                   y5,y6,y7,y8,y9,y10,y11
    
    line(x1,y1)-(x2,y2):  line-(x3,y3):  line-(x4,y4): line-(x1,y1):
    
    x6=2*x1-x4:    y6=2*y1-y4
    x7=2*x2-x3:    y7=2*y2-y3
    x9=(x2+x6)/2:  y9=(y2+y6)/2
    x10=(x6+x1)/2: y10=(y6+y1)/2
    x5=x6+x1-x9:   y5=y6+y1-y9
    x8=x7+x2-x9:   y8=y7+y2-y9
 
    if n>1 then YY(x5,y5,x6,y6,x9,y9,x1,y1,n-1):  YY(x7,y7,x8,y8,x2,y2,x9,y9,n-1)
        
    
end sub

ScreenRes 800,600
k=65
YY(400-k,600-2*k,400+k,600-2*k, 400+k,600,400-k,600, 10)

sleep

Вот и оно классическое дерево Пифагора.

Чтобы иметь возмжность строить разное по величине дерево внесём переменую k. А ещё чтобы дерево всегда стояло внизу, на земле.

7
464.629 GOLOS
На Golos с October 2016
Комментарии (4)
Сортировать по:
Сначала старые