Остановите аргумент "экстента" в Turtle, чтобы он не менял направление круга - PullRequest
2 голосов
/ 01 мая 2020

Я работаю над домашним заданием, где инструкции:

Используя графику Черепах, реализуем функции планет (), которые будут имитировать движение планет Меркурия, Венеры, Земли и Марса во время один оборот пл anet марс. Можно предположить, что:

  1. В начале симуляции все планеты выстроены в ряд (скажем, вдоль отрицательной оси Y).
  2. Расстояния Меркурий, Венера, Земля Марс от Солнца (центр вращения) составляет 58, 108, 150 и 228 пикселей.
  3. Для каждого 1-градусного кругового движения Марса Земля, Венера и Меркурий будут двигаться 2, 3, и 7,5 градусов соответственно.

На рисунке ниже показано состояние симуляции, когда Земля находится примерно на четверти пути вокруг Солнца. Обратите внимание, что Меркурий почти завершил свой первый оборот.

Expected image

Вывод, который я получаю:

Actual image

Вот мой код:

import turtle
import math


s = turtle.Screen()
t = turtle.Turtle()

def jump(t,x,y):
    'makes turtle t jump to coordinates (x,y)'
    t.penup()
    t.goto(x,y)
    t.pendown()

def planets(t):

    #mercury
    jump(t,0,-58)
    t.circle(58,337.5)

    #venus
    jump(t,0,-108)
    t.circle(108,135)

#   earth
    jump(t,0,-150)
    t.circle(150,90)

#   mars
    jump(t,0,-228)
    t.circle(228,45)



planets(t)
turtle.done()

Итак, в основном, направление меняется. Как получить желаемый результат? Как мне остановить аргумент extent на изменение направления круга?

1 Ответ

1 голос
/ 02 мая 2020

Проблема не в extent аргументе circle(), а в том, что вы запускаете каждую новую орбиту с черепахой в произвольной ориентации, в которой она находилась, когда она заканчивала предыдущую орбиту. Вы должны установить черепаху в известной ориентации, прежде чем рисовать каждую орбиту:

from turtle import Screen, Turtle

def jump(t, x, y):
    ''' makes turtle t jump to coordinates (x, y) '''

    t.penup()
    t.goto(x, y)
    t.pendown()

def planets(t):

    # mercury
    t.setheading(0)
    jump(t, 0, -58)
    t.circle(58, 337.5)
    t.stamp()

    # venus
    t.setheading(0)
    jump(t, 0, -108)
    t.circle(108, 135)
    t.stamp()

    # earth
    t.setheading(0)
    jump(t, 0, -150)
    t.circle(150, 90)
    t.stamp()

    # mars
    t.setheading(0)
    jump(t, 0, -228)
    t.circle(228, 45)
    t.stamp()

turtle = Turtle()
turtle.shape('circle')
turtle.shapesize(0.5)
turtle.hideturtle()

planets(turtle)

screen = Screen()
screen.exitonclick()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...