2015-09-09 8 views
-1

У меня есть код, в котором пользователи вводили длину, в которой они хотят, чтобы их звезда была, а затем она вытягивает звезду. То, что я пытаюсь сделать здесь, заключается в том, что каждый раз они делают свой вклад не только в том, что он рисует звезду, но также удерживает ее в центре экрана. поэтому средняя точка 0,0Python (Длина ввода, чтобы нарисовать звезду с центральной точкой 0,0)

import turtle 

Length = eval(input("enter the length you want for your star: ")) 

turtle.penup() 
turtle.goto(0,200) 
turtle.pendown() 
turtle.goto(0,-200) 
turtle.penup() 
turtle.goto(200,0) 
turtle.pendown() 
turtle.goto(-200,0) 

turtle.penup() 
turtle.goto(0,0) 

turtle.showturtle 
turtle.pendown() 
turtle.left(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
+2

Хорошо. так в чем проблема? О чем вы просите о помощи? –

+0

как поставить центр звезды на 0,0 независимо от размера звезды. Просто возиться, пытаясь учиться. =) –

ответ

2

Попробуйте

import turtle 
import math 

theta = 18 * math.pi/180 # convert degrees to radians 

Length = eval(input("enter the length you want for your star: ")) 

x = math.sin(theta) * Length 
y = math.cos(theta)* Length/2 

turtle.penup() 
turtle.goto(0,200) 
turtle.pendown() 
turtle.goto(0,-200) 
turtle.penup() 
turtle.goto(200,0) 
turtle.pendown() 
turtle.goto(-200,0) 

turtle.penup() 
#turtle.goto(0,0) 
turtle.goto(x,-y) 

turtle.showturtle 
turtle.pendown() 
turtle.left(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
turtle.right(36*4) 
turtle.forward(Length) 
turtle.hideturtle() 

input("Press Enter to exit") 

Это просто вопрос выяснить координаты центра звезды вы рисунок, а затем переводил начальную позицию по этому вектору , чтобы переместить центр в начало координат.

EDIT:

Если вернуться к исходному рисунку, слева от оси у, ваши см двух отрезков, в перевернутой V-образной формы. Если мы присоединимся к двум пересечениям этих сегментов с осью х друг к другу, мы имеем равнобедренный треугольник, центром которого является центр звезды. Это то, что нам нужно найти. Теперь каждый угол звезды составляет 36 градусов, а половина - 18. Вот откуда 18. Чтобы на самом деле найти центр, нам нужно использовать некоторую тригонометрию, которую, как я понимаю, вы еще не изучили. Функции sin и cos - синусоидальные и косинусные функции от тригонометрии. Аргументы этих функций обычно даются не в градусах, а в другой системе, называемой радианами. Бывает, что 1800 градусов - это то же самое, что и pi radians, поэтому theta - это всего лишь 18-градусный угол, измеренный в радианах.

«Почему 18 градусов», я слышал, вы спрашиваете? Помните, что мы пытаемся найти центр этого равнобедренного треугольника с двумя сторонами, равными длине, и гипотенузой длины. Итак, я бросаю перпендикуляр к основанию, мы разрезаем его на два прямоугольных треугольника с одним острым углом 18 градусов (а остальные 72 градуса). И вот сюда входят синус и косинус. В правом треугольнике с гипотенуза Длина, сторона напротив острого угла тета имеет длину sin(theta)*Length, а сторона, прилегающая к углу тета, имеет длину cos(theta)*Length.

Это длинное объяснение, но я не знаю, как сделать его короче в этом формате. Вы можете найти объяснение с фотографиями here

+0

является то, что фактическая формула для тета? моя математика не к добру, поэтому я пытаюсь понять переменную тета. Также функция .sin & .cos, какова будет их цель? извините за вопросы, которые я изучаю. –

+0

Объяснение далека от того, чтобы долго вписываться в комментарий, поэтому я редактировал свой пост. BTW: Если мой ответ решил вашу проблему, примите его. – saulspatz

+0

Я просто нажимаю, чтобы принять его? –