2017-02-05 4 views
0

У меня возникли проблемы с рекурсивно рисованием квадратов. Мой вопрос в том, какая длина должна быть передана моей функции draw_squares при рекурсивном вызове. Кажется, я не могу правильно его разместить в пределах первоначальной площади. Найдите пример подключенного вывода. Output exampleРекурсивно рисовать квадраты в Python

draw_squares(side_size, depth): 
    turtle.forward(side_size) 
    turtle.left(90) 
    turtle.forward(side_size) 
    turtle.left(90) 
    turtle.forward(side_size) 
    turtle.left(90) 
    turtle.forward(side_size) 
    turtle.left(90) 
    if depth > 1: 
     turtle.penup() 
     turtle.left(90) 
     turtle.forward(side_size * 1/2) 
     turtle.right(90) 
     turtle.pendown() 
    else: 
     pass 

#Draw diagonal squares within original square 

def draw_squares2(side_size, depth): 
    if depth > 1 and depth % 2 == 0: 
     turtle.right(45) 
     draw_squares(side_size * 1/3, depth - 1) 
+1

Некоторые из [основных] (http://mathworld.wolfram.com/PythagorassConstant.html) [знаний] (https://en.wikipedia.org/wiki/Square#Other_facts) о геометрии могут помочь. – mkrieger1

+0

Вам нужно будет использовать [эту функцию] (https://docs.python.org/2/library/math.html#math.sqrt). – mkrieger1

ответ

2

Во-первых, вы не рисовать квадраты рекурсивно здесь: draw_squares2 вызывает только draw_squares, который никогда не называет себя или его родителя. Рекурсивная функция вызывает себя, прямо или косвенно. Похоже, вы работаете над рекурсивным решением (перемещение черепахи до середины одной стороны), но вы еще не там.

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

Проблема у вас есть, как указывали другие, основная геометрия: какова длина стороны квадрата, вписанного в другой квадрат под углом 45 градусов? Длина, которая вам нужна, составляет sqrt (2)/2 раз больше длины стороны родителей.

Следите за тем, как вы используете это значение; ваша программа восприимчива к умножению и делению вещей на 2. Рассмотрите возможность использования print операторов в критических точках для отслеживания ваших вычислений.

1

Проблема как постановка не рекурсивна, но она может быть. Я написал пример подхода ниже с использованием штамповки которые, не будучи непосредственно переводимые на свой рисунок подхода, должны дать вам идеи, но не решение:

from turtle import Turtle, Screen 

colors = ["navy", "gold"] 

STAMP_UNIT = 20 

def draw_figure(turtle, side_size, depth): 
    turtle.turtlesize(side_size/STAMP_UNIT) 
    turtle.color(colors[depth % 2], "white") 
    turtle.stamp() 

    if depth < 1: 
     return 

    turtle.forward(side_size/4) 

    turtle.left(45) 
    draw_figure(turtle, side_size/2/2**0.5, depth - 1) 
    turtle.right(45) 

    turtle.backward(side_size/2) 

    turtle.left(45) 
    draw_figure(turtle, side_size/2/2**0.5, depth - 1) 
    turtle.right(45) 

    turtle.forward(side_size/4) # return to starting point 

yertle = Turtle(shape="square", visible=False) 
yertle.penup() 

draw_figure(yertle, 240, 3) 

screen = Screen() 

screen.exitonclick() 

На глубине 3 получаем:

enter image description here

Но установка глубины 1 получает нам оригинальную фигуру вопрос:

enter image description here

Смежные вопросы