Штабелирование треугольников с черепахой Python - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно нарисовать 4 разноцветных треугольника друг над другом.Я разобрался, как нарисовать 4 рядом друг с другом, но мне не удается поставить их друг на друга.Это мой код:

import turtle
import math
from random import randint

otto = turtle.Turtle()

def repeat_triangle(t, l):
    setcolor(t, 1)
    for i in range(4):
        t.color(randint(0,255),randint(0,255),randint(0,255))
        t.begin_fill()
        t.fd(100) 
        t.lt(120)
        t.fd(100)
        t.lt(120)
        t.fd(100)
        t.lt(120)
        t.fd(100)
        otto.end_fill()


otto.shape('turtle')
repeat_triangle(otto, 80)

turtle.mainloop()
turtle.bye()

Отто - имя моей черепахи.setcolor - это функция, которую я написал для назначения случайных цветов.Кроме того, не могли бы вы рассказать мне, как нарисовать кучу треугольников 3х3?Большое спасибо.Я использую ноутбуки Jupyter, так что он может иметь некоторые отличия от обычного Python.Ссылка на изображение может быть найдена здесь !

Ответы [ 2 ]

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

Еще один пример лучшей жизни: штамповка вместо рисунок :

from turtle import Screen, Turtle
from random import random

TRIANGLE_EDGE = 100
CURSOR_EDGE = 20

TRIANGLE_HEIGHT = TRIANGLE_EDGE * 3 ** 0.5 / 2

def repeat_triangle(turtle, repetitions):
    for _ in range(repetitions):
        turtle.color(random(), random(), random())
        turtle.stamp()
        turtle.forward(TRIANGLE_HEIGHT)

screen = Screen()

otto = Turtle('triangle', visible=False)
otto.penup()
otto.setheading(90)
otto.shapesize(TRIANGLE_EDGE / CURSOR_EDGE)

repeat_triangle(otto, 4)

screen.mainloop()

enter image description here

Кроме того, этот код может быть неправильным, в зависимости от того, какую версию черепахи вы используете:

t.color(randint(0,255),randint(0,255),randint(0,255))

Черепаха, которая поставляется с Python, по умолчанию имеет значение float от 0 до 1 - если вы хотитеиспользуйте int от 0 до 255, который вы должны запросить через:

turtle.colormode(255)

Простая обработка вашего рисунка кода для укладки треугольников может быть:

from turtle import Screen, Turtle
from random import randint

def repeat_triangle(t, length):
    height = length * 3 ** 0.5 / 2

    for _ in range(4):
        t.color(randint(0, 255), randint(0, 255), randint(0, 255))

        t.begin_fill()

        for _ in range(3):
            t.fd(length)
            t.lt(120)

        t.end_fill()

        t.sety(t.ycor() + height)

screen = Screen()
screen.colormode(255)

otto = Turtle('turtle')
otto.penup()

repeat_triangle(otto, 100)

screen.mainloop()
0 голосов
/ 26 ноября 2018

Вы можете попробовать это, возможно:

import turtle
import math
from random import randint

otto = turtle.Turtle()

def repeat_triangle(t, l):
    for i in range(3):
        t.color(randint(0,255),randint(0,255),randint(0,255))
        t.begin_fill()
        t.fd(100) 
        t.lt(120)
        t.fd(100)
        t.lt(120)
        t.fd(100)
        t.lt(120)
        t.fd(100)
        #added code starts here
        t.lt(180) #turn 180 (reverse direction)
        t.fd(50) #go halfway
        t.lt(60) #turn downwards and start drawing 
        t.fd(100)
        t.lt(120)
    t.fd(100) #finishing after the loop
    t.lt(120)
    t.fd(100)
    #added code finishes here
    otto.end_fill()

otto.shape('turtle')
repeat_triangle(otto, 80)

turtle.mainloop()
turtle.bye()
...