Python Turtle Как запрограммировать его на автоматическое отключение? - PullRequest
0 голосов
/ 28 ноября 2018

Я должен запрограммировать функцию, которая рисует треугольники.Мне удалось довольно хорошо нарисовать треугольники рядом друг с другом, но я не могу запрограммировать это так, чтобы треугольники стояли один под другим.Или, по крайней мере, не так, что это происходит автоматически.
Я сделал это так:

import turtle
otto = turtle.Turtle()

def triangle(t, l): 
    t.color("cadetblue")
    t.begin_fill() 
    for i in range(3):
        t.fd(l)
        t.lt(360/3)
    t.end_fill() 

def pile_triangle (t,l):
    for i in range(1):
        triangle(t, l)
        t.penup()
        t.goto(0,-70)
        t.pendown()
    for i in range(1):  
        triangle(t, l) 
        t.penup()
        t.goto(0,-140)
        t.pendown()
    for i in range(1): 
        triangle(t, l) 
        t.penup()
        t.goto(0,-210)
        t.pendown()
    for i in range(1):  
        triangle(t, l) 


otto = turtle.Turtle()
pile_triangle(otto, 80)


turtle.mainloop()
turtle.bye()

Итак, как вы можете видеть, когда значение l увеличивается, промежутки или треугольники перекрываются.Можно ли это сделать по-другому?Так что он рисует четыре треугольника и соответствует длине l?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

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

side_length * sqrt(3) / 2

Вот переделка вашего кода с этими двумя изменениями:

import turtle

def triangle(t, length):
    t.begin_fill()

    for i in range(3):
        t.forward(length)
        t.left(360 / 3)

    t.end_fill()

def pile_triangle(t, length):
    height = length * 3 ** 0.5 / 2  # height of triangle given a side

    for i in range(1, -3, -1):  # center stack vertically on screen
        t.penup()
        t.goto(-length / 2, i * height)  # center stack horizontally on screen
        t.pendown()

        triangle(t, length)

otto = turtle.Turtle()
otto.color("cadetblue")

pile_triangle(otto, 100)

turtle.mainloop()
turtle.bye()
0 голосов
/ 28 ноября 2018

Это то, что вы хотите?

import turtle
def triangle(t,l): 
    t.color("cadetblue")
    t.begin_fill() 
    t.lt(360/6)
    for i in range(3):
        t.lt(-360/3)
        t.fd(l)
    t.end_fill()
    t.penup()
    t.lt(-360/3)
    t.fd(l)
    t.lt(-360/3)
    t.fd(l/2)
    t.lt(180)
otto = turtle.Turtle()
for i in range(3):
    triangle(otto,50)
...