Генерируем картинку используя объектную реализацию черепашьей графики - PullRequest
0 голосов
/ 20 декабря 2018

Я программирую на Python и пытаюсь создать это изображение:

img

, используя объектную реализацию графики черепахи с рендерингом SVG.Изображение - охота на черепах, где несколько голубоватых черепах преследуют одну красную.Я начал так, но не знаю, как продолжить.

class Turtle:
    def __init__(self):
        self.x = 50
        self.y = 50
        self.heading = 0
        self.lines = []

    def left(self, angle):
        self.heading -= angle

    def right(self, angle):
        self.heading += angle

    def forward(self, d):
        nx = self.x + d * math.cos(self.heading * math.pi / 180)
        ny = self.y + d * math.sin(self.heading * math.pi / 180)
        self.lines.append((self.x, self.y, nx, ny))
        self.x, self.y = nx, ny

Я был бы очень рад, если бы кто-нибудь смог мне помочь с этим вопросом.

1 Ответ

0 голосов
/ 20 декабря 2018

Ваш вопрос неясен, используете ли вы библиотеку черепах Python объектно-ориентированным способом или реализуете свою собственную объектно-ориентированную библиотеку черепах.Если вы реализуете свою собственную библиотеку Turtle, вам понадобится другая графическая библиотека в качестве основы (например, tkinter).И время, и терпение.

Если вы используете библиотеку черепах Python, то определение класса с именем Turtle, вероятно, является неправильным первым шагом, поскольку библиотека черепах уже предоставляет класс с именем Turtle.И я вижу мало в вашем Turtle классе, который был бы полезен.Мне удалось реализовать следующее изображение с использованием библиотеки черепах Python объектно-ориентированным способом, содержащим менее 35 строк кода:

enter image description here

Основано на выполненииВот мои предложения:

  • Выберите постоянный радиус и, используя его вместе с cos, sin и radians из математической библиотеки Python, обойдите круг в18 градусов (360/20) шагов с нанесением синих черепах (чей оттенок зависит от угла - вам потребуется фазовая коррекция.) Пропустите две позиции, где синус фактически равен нулю.

  • В точке 180 градусов поместите красную черепаху.

  • Теперь нам нужно заставить черепах двигаться.Вы можете либо использовать цикл while True:, из которого вы в конце разорветесь, либо использовать более ориентированный на события подход с screen.ontimer().Вы можете составить свой собственный список черепах или использовать screen.turtles().

  • Для каждого шага движения, перемещайте каждую черепаху вперед на 1 пиксель.Для всех голубоватых черепах вы также хотите назначить их на красную черепаху.Для этого:

    blue.setheading(blue.towards(red))

    - ваш друг в любом сценарии погони.

  • Когда позиция Х красной черепахи превышает радиус вашейкруг по некоторому краю, все готово.

  • Добавьте все необходимые штрихи, чтобы он выглядел лучше.

Экспорт изображения черепахи в видеSVG - это отдельная проблема, когда у вас есть работающая графика - вы можете найти примеры таких примеров здесь, в StackOverflow.

...