Фрактальное дерево питон задача

Рисование фрактального дерева в Python

Я пытаюсь рисовать фрактальное дерево в Python, которое имеет 3 ветки. Я знаю, как рисовать дерево с двумя ветвями, но с тремя ветвями. не уверен Пытался найти примеры, но не мог. Только найдены примеры деревьев с двумя ветвями. Есть ли у кого-нибудь идеи, как это сделать? Для дерева с двумя ветвями я использовал следующий код:

import turtle def tree(f_lenght, min_lenght=10): """ Draws a tree with 2 branches using recursion """ turtle.forward(f_lenght) if f_lenght > min_lenght: turtle.left(45) tree(0.6*f_lenght, min_lenght) turtle.right(90) tree(0.6*f_lenght, min_lenght) turtle.left(45) turtle.back(f_lenght) turtle.left(90) tree(100) turtle.exitonclick() 

Вы понимаете углы, выбранные в вашем существующем коде? Как вы думаете, под какими углами должны быть ветви в дереве с 3 ветвями?

1 ответ

Вот расширенный пример. Используя ваш метод для создания ветвей, очень легко сделать их перекрытыми, поэтому я добавил несколько параметров, чтобы помочь с этим. Не стесняйтесь играть с кодом, но это пример произвольных уровней рекурсии.

import turtle def tree(f_length, spray=90., branches=2, f_scale=0.5, f_scale_friction=1.4, min_length=10): """ Draws a tree with 2 branches using recursion """ step = float(spray / (branches - 1)) f_scale /= f_scale_friction turtle.forward(f_length) if f_length > min_length: turtle.left(spray / 2) tree(f_scale * f_length, spray, branches, f_scale, f_scale_friction, min_length) for counter in range(branches - 1): turtle.right(step) tree(f_scale * f_length, spray, branches, f_scale, f_scale_friction, min_length) turtle.left(spray / 2) turtle.back(f_length) turtle.left(90) tree(80, spray=120, branches=4) turtle.exitonclick() 

Источник

Фрактальное дерево

Создайте «фрактальное дерево» (и сохраните в глобальной переменной wb_tree) с чёрными и белыми вершинами (и корнем).
Поясним немного, что такое дерево в понимании программиста:
Обычно (укоренённым) деревом называется иерархическая структура, состоящая из набора объектов (вершин), расположенных иерархически. У любой вершины может быть несколько «детей» – других вершин. Если у вершины нет дочерних вершин, она называется листом. У каждой вершины, кроме корня, есть ровно один родитель, у корня родителя нет. Кроме того, часто вершины деревьев раскрашивают для добавления им дополнительных характеристик. В нашем случае вершина дерева может иметь один из двух цветов: белый или чёрный.
PIC
Мы будем представлять каждую вершину в виде списка её дочерних элементов. Таким образом, это дерево будет список списков списков списков.
Пустое «белое» или «чёрное» дерево выглядит так: black = [].
А дерево с «чёрной» вершиной – так: tree = black.
Обычно любое дерево имеет конечное число элементов. Вы же должны сделать имитацию «бесконечно-глубокого» дерева, имеющего повторяющуюся фрактальную структуру.
Корень дерева – чёрный.
Каждая белая вершина содержит два чёрных поддерева.
Каждая чёрная вершина – три белых поддерева.
Белое и чёрное поддеревья везде одни и те же.

Примечания
В этой задаче вы должны ввести код, который создает глобальную переменную wb_tree с правильным содержимым. Как и в прочих задачах, где не сказано обратного, ваша программа не должна ничего выводить на экран.
Данная задача проверяется преподавателем.

Читайте также:  Дерево растущее без солнца

black = []
white = []
white.append([black, black])
black.append([white, white, white])
global wb_tree
wb_tree = black

выдает такую ошибку
Вердикт
wrong-answer
Лог компиляции
stdout:
/bin/sh ./build.sh 1>&2

stderr:
Время / Память
21ms / 3.22 MB
Номер теста
1
Ввод
1
Ожидаемый результат
ok
Вывод
fail
Сообщение
wrong answer 1st lines differ — expected: ‘ok’, found: ‘fail’

Источник

Фрактальное дерево

Создайте «фрактальное дерево» (и сохраните в глобальной переменной wb_tree) с чёрными и белыми вершинами (и корнем).
Поясним немного, что такое дерево в понимании программиста:
Обычно (укоренённым) деревом называется иерархическая структура, состоящая из набора объектов (вершин), расположенных иерархически. У любой вершины может быть несколько «детей» – других вершин. Если у вершины нет дочерних вершин, она называется листом. У каждой вершины, кроме корня, есть ровно один родитель, у корня родителя нет. Кроме того, часто вершины деревьев раскрашивают для добавления им дополнительных характеристик. В нашем случае вершина дерева может иметь один из двух цветов: белый или чёрный.
Мы будем представлять каждую вершину в виде списка её дочерних элементов. Таким образом, это дерево будет список списков списков списков.
Пустое «белое» или «чёрное» дерево выглядит так: black = [].
А дерево с «чёрной» вершиной – так: tree = black.
Обычно любое дерево имеет конечное число элементов. Вы же должны сделать имитацию «бесконечно-глубокого» дерева, имеющего повторяющуюся фрактальную структуру.
Корень дерева – чёрный.
Каждая белая вершина содержит два чёрных поддерева.
Каждая чёрная вершина – три белых поддерева.
Белое и чёрное поддеревья везде одни и те же.

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

Фрактальное дерево
Создайте «фрактальное дерево» (и сохраните в глобальной переменной wb_tree) с чёрными и белыми.

Фрактальное дерево
Создайте «фрактальное дерево» (и сохраните в глобальной переменной wb_tree) с чёрными и белыми.

Фрактальное Броуновское движения ( оптимизация кода)
В общем у меня функция генерации фрактального броуновского движения. Делается все очень просто.

Фрактальное дерево
Фрактальное дерево.Основа — отрезок(ствол).Пожалуста памагите.

Фрактальное дерево
Создайте «фрактальное дерево» (и сохраните в глобальной переменной wb_tree) с чёрными и белыми.

Фрактальное дерево
Здраствуйте, у меня тут такая задача: нужно реализовать отбражение не форме фрактального дерева вот.

Фрактальное дерево
Люди добрые, помогите, пожалуйста, с заданием. Есть фрактальное дерево, которое имеет тройное.

Нужен перевод кода с Pascal на С# (Фрактальное дерево)
interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs.

Фрактальное сжатие
Ребзя подскажите кто разбирается в чем я ошибаюсь: по идеи должно быть что клацаешь на кнопку.

Фрактальное сжатие изображения
здравствуйте)))может кто помочь с кодом,который осуществляет фрактальное сжатие изображений.сделать.

Читайте также:  Двери из дерева зимой

Фрактальное сжатие изображений
Доброго времени суток. Имеется задача — написать программу для фрактального сжатия изображений.

Источник

Drawing a fractal tree in Python, not sure how to proceed

Fractal tree

But I’m kind of stuck on how to proges, because I need to reach for building this tree. This is what I’m trying to produce: Can any one tell me what I am doing wrong?

3 Answers 3

I really liked @cdlane answer, so I played with the code for a while. The tree now looks much better, and the code is much more readable, so I think it is worth sharing.

enter image description here

import turtle WIDTH = 15 BRANCH_LENGTH = 120 ROTATION_LENGTH = 27 class Tree_Fractal(turtle.Turtle): def __init__(self, level): super(Tree_Fractal, self).__init__() self.level = level self.hideturtle() self.speed('fastest') self.left(90) self.width(WIDTH) self.penup() self.back(BRANCH_LENGTH * 1.5) self.pendown() self.forward(BRANCH_LENGTH) self.draw_tree(BRANCH_LENGTH, level) def draw_tree(self, branch_length, level): width = self.width() self.width(width * 3. / 4.) branch_length *= 3. / 4. self.left(ROTATION_LENGTH) self.forward(branch_length) if level > 0: self.draw_tree(branch_length, level - 1) self.back(branch_length) self.right(2 * ROTATION_LENGTH) self.forward(branch_length) if level > 0: self.draw_tree(branch_length, level - 1) self.back(branch_length) self.left(ROTATION_LENGTH) self.width(width) if __name__ == '__main__': tree_level = 11 # choose tree = Tree_Fractal(tree_level) turtle.done() 

Источник

L-система с ветвлениями. Рисуем деревья и травы

До сих пор мы с вами рассматривали относительно простые способы формирования фрактальных кривых. Но что насчет более сложных, например, деревьев или кустарников?

Здесь очевидно недостаточно тех возможностей L-системы, которые мы прописали на предыдущих занятиях. Так как же генерировать фрактальные разветвленные кривые? Чтобы ответить на этот вопрос, давайте посмотрим, какие акробатические трюки должна вытворять черепашка, чтобы нарисовать фрагмент фрактального дерева.

Вначале она должна пройти вперед (то есть, вверх), затем, повернуть налево, пройти тот же путь, вернуться в точку ветвления, повернуть направо и еще пройти тот же путь.

Как все эти действия реализовать программно? Для этого предлагается использовать стек, работающий по принципу LIFO – последним вошел, первым вышел. Как только черепашка оказывается в точке ветвления, в стек помещается кортеж со значениями ее текущих координат и угла поворота:

Затем, выполняются две команды на поворот влево и перемещение вперед. Как только они завершаются, из стека выбирается последняя запись и черепашка возвращается на указанные в ней координаты. Далее, снова идет запись в стек, т.к. мы находимся в точке ветвления и собираемся пройтись по другой ветке. Затем, поворот направо и движение вперед. После этих команд, из стека извлекается последняя запись и черепашка вновь оказывается в точке ветвления.

На уровне команд весь этот процесс перемещения можно описать так:

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

Вот принцип ветвления, положенный в основу L-систем. Давайте реализуем его в нашей программе.

Для начала в методе draw_turtle() добавим список:

Читайте также:  Ламинат цвет тигровое дерево

который будем использовать как стек с данными (добавлять элементы в конец и извлекать тоже с конца). Далее, в этом же методе сделаем обработку квадратных скобок:

elif move == "[": turtle_stack.append((self.t.xcor(), self.t.ycor(), self.t.heading(), self.t.pensize())) elif move == "]": xcor, ycor, head, w = turtle_stack.pop() self.set_turtle((xcor, ycor, head)) self.width = w self.t.pensize(self.width)

Когда скобка открывается, в конец стека добавляем кортеж с текущими координатами черепашки, углом поворота и толщиной линии рисования. Когда встречается закрывающаяся скобка, то из стека извлекаются последние данные, черепашка возвращается в соответствующую позицию (метод set_turtle) и устанавливается сохраненная толщина линии рисования.

Вспомогательный метод set_turtle() выглядит следующим образом:

def set_turtle(self, my_tuple): self.t.up() self.t.goto(my_tuple[0], my_tuple[1]) self.t.seth(my_tuple[2]) self.t.down()

Все, теперь наша L-система может использовать механизм ветвления для построения природных фракталов. Если сейчас прописать аксиому:

l_sys.add_rules(("F", "F[+F][-F]")) l_sys.generate_path(1) l_sys.draw_turtle( (0, -100), 90)

то получим следующий результат на первой итерации:

При трех итерация будет уже такой результат:

Похоже на дерево. Но мы усовершенствуем этот фрактал и пропишем его со следующими параметрами:

f_len = 10 # длина одного сегмента прямой (в пикселах) angle = 33 # фиксированный угол поворота (в градусах) axiom = "A" l_sys = LSystem2D(t, axiom, pen_width, f_len, angle) l_sys.add_rules(("F", "FF"), ("A", "F[+A][-A]")) l_sys.generate_path(5)

В результате, ствол дерева будет постоянно увеличиваться на каждой новой итерации и дерево уже больше походит на само себя:

Давайте посмотрим еще пару примеров природных фракталов:

f_len = 5 # длина одного сегмента прямой (в пикселах) angle = 25.7 # фиксированный угол поворота (в градусах) axiom = "F" l_sys = LSystem2D(t, axiom, pen_width, f_len, angle) l_sys.add_rules(("F", "F[+F]F[-F]F")) l_sys.generate_path(4)

f_len = 10 # длина одного сегмента прямой (в пикселах) angle = 22.5 # фиксированный угол поворота (в градусах) axiom = "F" l_sys = LSystem2D(t, axiom, pen_width, f_len, angle) l_sys.add_rules(("F", "FF-[-F+F+F]+[+F-F-F]")) l_sys.generate_path(3)

На мой взгляд, получились воплне узнаваемые формы растений. Вот так с помощью простых правил и ветвления L-система способна воспроизводить такие изображения.

Видео по теме

Фракталы вокруг нас. Как все начиналось

#1. Кривая Коха и снежинка Коха

#2. Рисуем кривую Коха и снежинку Коха

#3. Простая L-система на плоскости

#4. L-система для дракона Хартера-Хайтвея, ковра Серпинского и кривой Гильберта

#5. L-система с ветвлениями. Рисуем деревья и травы

#6. Добавляем параметры в L-систему

#7. Добавляем случайности в L-систему

#8. Добавляем цвет в L-систему

#9. Как вычисляется фрактальная размерность по Хаусдорфу

#10. Системы итерированных функций СИФ

#11. Рандомизированная система итерированных функций

#12. Примеры фракталов, сгенерированных СИФ

#13. Как построить множества Жюлиа

#14. Рисуем множество Мандельброта

© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Оцените статью