Вложение треугольников с использованием черепахи - PullRequest
2 голосов
/ 14 апреля 2019

Я пытаюсь вложить 4 равносторонних треугольника размером 20, 40, 60 и 8 с равным интервалом 7 внутри черепахи.

код

from turtle import *

number_of_shapes = 4

side = 3

for spacing in range(1, number_of_shapes+1):

    for sides in range(1, side+1):
       forward(20*spacing)
       left(360/side)

    penup()
    goto(-10*spacing, -7*spacing)
    pendown()

Мне пришлось использовать интервал -10 * в goto (интервал -10 *, интервал -7 *), чтобы получить почти равный интервал между вложенными равносторонними треугольниками. Мне было интересно, есть ли способ просто использовать число 7 для достижения равного расстояния.

Ответы [ 3 ]

0 голосов
/ 15 апреля 2019

Кажется, это классическая проблема «лучше жить с помощью штамповки».Треугольники нарисованы из одного угла, но отмечены от центра, что решает проблему центрирования:

from turtle import Screen, Turtle

NUMBER_OF_SHAPES = 4
CURSOR_SIZE = 20

screen = Screen()

turtle = Turtle('triangle', visible=False)
turtle.fillcolor('white')
turtle.right(30)  # lay bottom on horizontal

for sizing in range(NUMBER_OF_SHAPES, 0, -1):

    turtle.shapesize(20 * sizing / CURSOR_SIZE)

    turtle.stamp()

screen.exitonclick()

нарисованные треугольники OP слева, треугольники отмеченывышеуказанный код справа:

enter image description here

0 голосов
/ 13 мая 2019

Если ОП правильно прочитал свой вопрос о задании, то интервал 7 должен иметь только нижняя сторона треугольников :)

0 голосов
/ 14 апреля 2019

Соедините углы, и вы увидите ангела 30deg. Создает прямоугольный треугольник со сторонами 10 и 7. Только 45deg создает прямоугольный треугольник со сторонами 10 и 10.

Но значения (10, 7) не верны. Правильные значения (10, 5.8) - но они могут создавать пробелы, которые выглядят не так хорошо, как для (10, 7) на мониторах, которые используют только целые значения для отображения элементов.

a = 10
b = 10 * tangens(30deg) = 5.8

Я использую эти значения, чтобы создать пространство между треугольниками, и затем я рисую линию под углом 30 градусов - она ​​идеально соединяет углы. Если вы используете b = 7, вы получите свои треугольники, и эта линия не будет соединять углы

from turtle import *
import math

number_of_shapes = 4

side = 3

a = 10
b = math.tan(math.radians(30)) * a
# b = 7

for spacing in range(1,number_of_shapes +1):

    for sides in range(1,side+1):

       forward(20*spacing)

       left(360/side)

    penup()

    goto(-a * spacing, -b * spacing)

    pendown()


left(30)
forward(100)

(10, 7) дает:

enter image description here

(10, 5.8) дает:

enter image description here

(10, 5.8) помещает треугольники в правильные места, но мониторы не идеальны (они могут использовать только целочисленные значения для x,y), поэтому пробелы между треугольниками могут выглядеть не так хорошо, как в вашей версии.

...