роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Описание: Построение дерева Пифагора восьмого порядка методом Монте-Карло.
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



Пример нерекурсивного построения фрактального дерева Пифагора восьмого порядка методом Монте-Карло.

Пример на GameLogo из статьи "Очарование Logo" (Компьютерные Вести, №52, 2007 г. , Азбука программирования )
Автор А. КОЛЕСНИКОВ.

' построение фрактального дерева Пифагора
' восьмого порядка методом Монте-Карло.
' Компьютерные Вести, №52, 2007 год
' Азбука программирования, Очарование Logo
' http://www.kv.by/index2007521201.htm

переменная длина
переменная красный
переменная ширина

спрятать черепаху
повторить 525 {
домой
ширина=8
назад 100
перо ширина
красный = 64
цвет RGB(красный, 0, 0)
длина = 100
вперед длина
повторить 8 {
ширина = ширина - 1
перо ширина
красный = красный + (255 - 64) / 8
цвет RGB(красный, 0, 0)
если случайный > 0,5 то налево 45 иначе направо 45
вперед длина
длина = длина * 0.6
}
}
 
 Top
Sally Post Id



Рядовой


Сообщений всего: 4
Дата рег-ции: Янв. 2014  



Построение полного фрактального дерева произвольной глубины с произвольным ветвлением:
CODE:
' построение фрактального дерева Пифагора

ПЕРЕМЕННАЯ вилка
ПЕРЕМЕННАЯ уровень
ПЕРЕМЕННАЯ уровней
ПЕРЕМЕННАЯ длина_ветки
ПЕРЕМЕННАЯ угол_начальный
ПЕРЕМЕННАЯ угол_вилки
МАССИВ ветви[10] ' требуется [уровней-1]
ПЕРЕМЕННАЯ сжатие

уровней = 6        ' глубина построения дерева
вилка = 4          ' число новых ветвей на каждой развилке
угол_вилки = 30    ' угол между ветвями на развилке
угол_начальный = 45' отклонение первой ветви на развилке
длина_ветки = 200  ' базовая длина ветки
сжатие = 0.7       ' относительное укорачивание веток

ПОДНЯТЬ ПЕРО
МЕСТО 400, 600
ОПУСТИТЬ ПЕРО

ПЕРО уровней
ВПЕРЁД длина_ветки
ПОВТОРЯТЬ ПОКА уровень>=0
{
    уровень = уровень+1
    ЕСЛИ уровень=уровней ТО ' ветка последнего уровня
        уровень = уровней-1
        НАЗАД сжатие^уровень*длина_ветки
    КОНЕЦ УСЛОВИЯ
    ЕСЛИ ветви[уровень]<вилка ТО ' рисуем развилку
        ЕСЛИ ветви[уровень]=0 ТО НАЛЕВО угол_начальный ИНАЧЕ НАПРАВО угол_вилки
        ветви[уровень] = ветви[уровень]+1
        ПЕРО уровней-уровень
        ВПЕРЁД сжатие^уровень*длина_ветки
    ИНАЧЕ ' возврат к предыдущей развилке
        ветви[уровень] = 0
        НАЛЕВО угол_вилки*(вилка-1)-угол_начальный
        НАЗАД сжатие^(уровень-1)*длина_ветки
        уровень = уровень-2
    КОНЕЦ УСЛОВИЯ
}
СПРЯТАТЬ ЧЕРЕПАХУ

В целом и так фрактальный алгоритм без рекурсии выглядит неуклюже... а ещё не получилось красиво собрать условия "возврат к предыдущей развилке" и "ветка последнего уровня". Удивляет приоритет степени равный умножению. Но результат симпатичный.

(Отредактировано автором: 05 Января, 2014 - 19:29:18)

 
 Top
Страниц (1): [1]
« Проекты для GameLogo »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru