Пример: Кривая дракона (генерация последовательностей)
Написать функцию, которая строит
кривую дракона глубины n.
Можно подойти к построению кривой по-другому. Запишем правила создания кривой как "что-то заменить на другое"
- Обозначим:
- Первый отрезок обозначим как АF.
- F - рисуем отрезок
- + - повернуть направо на 90o
- - - повернуть налево на 90o
- A и B - их не рисуем, они нужны, чтобы описывать правила
- Напишем правила:
- из А получаем A+BF+
- из В получаем −FA−B
# -*- coding: utf-8 -*-
import turtle
import time
import math
def gen(size, n): # Первый отрезок обозначим как АF
t.fd(size)
A(size, n-1)
def A(size, n):
if n==0: # A не рисуем никак
return
# из А получаем A+BF+
A(size, n-1) # A
t.right(90) # +
B(size, n-1) # B
t.fd(size) # F
t.right(90) # +
def B(size, n):
if n==0: # B не рисуем никак
return
# из В получаем −FA−B
t.left(90) # -
t.fd(size) # F
A(size, n-1) # A
t.left(90) # -
B(size, n-1) # B
t = turtle.Turtle()
t.shape("turtle")
t.width(3)
t.speed(0)
t.color('blue')
gen(10, 10) # правила применили глубиной 10
t.hideturtle()
turtle.done()
- e12_dragon.png: