Сохранен 8
https://2ch.hk/pr/res/1318497.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Python turtle, кривая Коха

 Аноним 29/12/18 Суб 23:40:06 #1 №1318497 
image.png
image.png
image.png
Здравствуйте. Решил поиграть в черепашку на питоне и в один момент захотелось написать фрактал Коха, а именно его снежинку. В процессе завис, ничего не понял, зашел в гугл и нашел её код (снизу).

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

1) f(300,2). d не равно 0, идем по else. f(l/3, d-1), черепашка проделывает первый путь длиной 100 единиц, d становится равен 1 (и так до самого конца, от исходного значения отнимается 1). делает угол 60° влево. И так далее сверху вниз. Но это неправильный ход мыслей, т.к. скорее всего функция вызывает саму себя и цикл будет идти с самого начала.

2) f(300,2). d не равно 0, идем по else. 300/3 = 100, d = 2-1 = 1. проходим путь длиной 100, функция вызывает саму себя, d=1-1=0, проходим по if d == 0, рисуется линия длиной 100. конец.

Скорее всего что проблема в том что я абсолютно не понимаю работы циклов/функций в питоне, так что помогите пожалуйста мне понять.

import turtle
turtle.speed(0)
def f(l,d):
\tif d==0:
\t\tturtle.forward(l)
\telse:
\t\tf(l/3, d-1)
\t\tturtle.left(60)
\t\tf(l/3, d-1)
\t\tturtle.right(120)
\t\tf(l/3, d-1)
\t\tturtle.left(60)
\t\tf(l/3, d-1)
f(300,2)
turtle.done()
Аноним 29/12/18 Суб 23:42:54 #2 №1318501 
image.png
>>1318497 (OP)
извиняюсь, 1 и 2 пик одинаковы, там должен был быть этот
Аноним 31/12/18 Пнд 12:03:37 #3 №1319076 
image.png
Захотелось реализовать эту твою снежинку Коха, никаких проблем, лол
https://pastebin.com/QvSXaXvr
Аноним 31/12/18 Пнд 17:10:49 #4 №1319174 
image.png
>>1318497 (OP)
>>1319076
Теперь это мой фрактальный тред!!

https://pastebin.com/pasYqfUt
Аноним 31/12/18 Пнд 18:53:10 #5 №1319210 
Как на Python нарисовать окружность с верхним и нижним радиусом?
Почему два радиуса? Хочу получить аэродинамический профиль
sage[mailto:sage] Аноним 01/01/19 Втр 02:05:02 #6 №1319311 
>>1319076
У тебя тоже происходит вызов функции функцией. Обьясни пожалуйста как это работает, как он оперирует переменной d.
Аноним 01/01/19 Втр 11:51:44 #7 №1319339 
>>1319311
ну кароч это называеться рекурсией. d - в моём случае это уровень детализации рисунка.
В рекукрсионных ф-иях обычно принято, чтобы она принимала любое чило к примеру и оканчивала вызывать себя при достижение его нуля (в моём случае единице)
ХЗ, кароч гугли рекурсия
Аноним 02/01/19 Срд 15:54:59 #8 №1319678 
2019-01-01175216.jpg
Тоже на днях снежинку Коха рисовал:
https://pastebin.com/GKXz1pWs

И лист папоротника, но он рисуется медленнее чем ожидал
https://pastebin.com/1FusZTwb
comments powered by Disqus