Условия и циклы. Первый фрактал своими руками.
Конспекты прошлых лет
План
- Орг. Конспекты?
- Орг. UNIX завтра не будет.
- Логические значения.
- Тип bool
- Примеры
- Операторы vs. выражения
- Условный оператор
- Циклы
- Функция range
- break, continue, return
Пример: множество Мандельброта
1 from Tkinter import Tk, Button, Canvas, PhotoImage
2
3 def in_mandel(x, y):
4 z = 0
5 c = x + 1j * y
6 for i in range(10):
7 z = z ** 2 + c
8 if abs(z) > 10:
9 return False
10 return True
11
12 def draw_mandel():
13 for x in range(200):
14 for y in range(200):
15 if in_mandel((x-100)/50.0, (y-100)/50.0):
16 image.put("white", to=[x, y])
17
18 root = Tk()
19 canvas = Canvas(root, width=199, height=199, background="black")
20 image = PhotoImage(width=200, height=200)
21 canvas.create_image(0, 0, image=image, anchor="nw")
22 canvas.pack()
23 button = Button(root, text="Draw", command=draw_mandel)
24 button.pack()
25 root.mainloop()
Пример: треугольник Серпинского методом IFS
1 import random
2 from Tkinter import Tk, Button, Canvas, PhotoImage
3
4 def putpixel(x, y):
5 x = int(x * 100 + 100)
6 y = int(y * 100 + 100)
7 image.put("white", to=[x, y])
8
9 def draw_serp():
10 x = random.random()
11 y = random.random()
12 for step in range(1500):
13 choice = random.choice(["top", "left", "right"])
14 if choice == "top":
15 x1 = x * 0.5
16 y1 = y * 0.5 + 0.5
17 elif choice == "left":
18 x1 = x * 0.5 - 0.5
19 y1 = y * 0.5
20 elif choice == "right":
21 x1 = x * 0.5 + 0.5
22 y1 = y * 0.5
23 x = x1
24 y = y1
25 if step > 50:
26 putpixel(x, y)
27
28 root = Tk()
29 canvas = Canvas(root, width=199, height=199, background="black")
30 image = PhotoImage(width=200, height=200)
31 canvas.create_image(0, 0, image=image, anchor="nw")
32 canvas.pack()
33 button = Button(root, text="Draw", command=draw_serp)
34 button.pack()
35 root.mainloop()
Задание
Памятка: задание – то, что обязательно выполнить для получения зачёта; упражнения – необязательные, но как правило задание решить проще, если сначала выполнить все упражнения; если вы меня пнёте, выдам вам комментарии про то, что и как лучше, и по заданию, и по упражнениям.
- Выберите себе фрактал из списка (либо предложите свой вариант). Сообщите мне о своём выборе. Обратите внимание, что у разных фракталов разная сложность реализации.
По образу и подобию примеров выше сделайте в вашем репозитории файл fractal.py, которая рисует изображение вашего фрактала с выбранными на ваш вкус параметрами
Упражнения
Скоприруйте к себе в репозиторий пример выше с множеством Мандельброта в файл mandel.py
Аналогично пункту 1 про треугольник Серпинского в файл sierpinsky.py
Фракталы
Артур Залевский: фрактал Глинна
Матвей Захаров: фрактальное пламя
Женя Зотова: фрактал Ньютона
Настя Маслова: дерево Пифагора
Паша Синицын: H-tree / Space-filling tree
Вакиль Тахавеев: множество Жюлиа
Медведева Соня: Nova фрактал
Маша Трегубова: Pentaflake
Данила Бредихин: Multibrot set
Нарайкина Юля:http://en.wikipedia.org/wiki/Burning_Ship_fractal
Контрольная работа
<<Img(/~dendik/images/python/2011-09-30-1.png, height=100px)>>
<<Img(/~dendik/images/python/2011-09-30-2.png, height=100px)>>