Многоугольник разделен на равнобедренный треугольник в питоне - PullRequest
0 голосов
/ 23 сентября 2019

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

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

import math
import turtle
bob = turtle.Turtle()

bob.speed(1)

def triangularpolygon (t,length,n):
    angle = (n-2)*180/n
    insideangle=angle/2
    rotatingangle=180-insideangle
    centrelength = length/2/math.cos(insideangle)
    t.fd(centrelength)
    for i in range(n):
        t.fd(length)
        t.lt(rotatingangle)
        t.fd(centrelength)
        t.bk(centrelength)
        t.rt(insideangle)

triangularpolygon(bob,100,6)

Нет сообщений об ошибках.Я думаю, что значение косинуса угла отрицательно.

1 Ответ

0 голосов
/ 25 сентября 2019

Я полагаю, что ваша черепаха движется не в том направлении и недостаточно далеко, потому что ваша математика неверна.Вы смешиваете градусы (по умолчанию для черепахи) с радианами (ожидание math.cos ()):

angle = (n-2)*180/n
insideangle=angle/2
centrelength = length/2/math.cos(insideangle)

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

from math import pi, sin as sine
from turtle import Screen, Turtle

def triangular_polygon(turtle, length, n):
    inside_angle = (n - 2) * pi / n / 2
    rotating_angle = pi - inside_angle
    radius = length / (2 * sine(pi / n))

    turtle.penup()
    turtle.forward(radius)
    turtle.left(rotating_angle)
    turtle.pendown()

    for _ in range(n):
        turtle.forward(length)
        turtle.left(rotating_angle)
        turtle.forward(radius)
        turtle.backward(radius)
        turtle.right(inside_angle)

screen = Screen()

bob = Turtle()
bob.radians()  # switch turtle to radians to match math functions
bob.speed('slowest')
bob.dot()  # mark the center of our screen for reference

triangular_polygon(bob, 100, 6)

bob.hideturtle()
screen.exitonclick()

enter image description here

...