Я пытаюсь написать простую графику черепахи для моего Transcrypt компилятора Python для JavaScript. Чтобы быть совместимым с модулем CPython Turtle, мне нужны карцинные координаты, т. Е. Начало координат должно быть в центре холста. Есть ли способ, которым я могу достичь этого, без использования отдельной системы координат и преобразования их для каждого объекта в моем собственном коде.Как поместить начало холста в центр
Я видел, что для отдельных объектов я могу использовать centerX и centerY, чтобы центрировать их контрольную точку внутри такого объекта. Но я не мог найти пример размещения источника в середине холста.
Решение, данное в How to change the origin of the canvas to the center?, работает, но выглядит несколько искусственным, так как я бы компенсировал положение мыши для этого перевода. Также это дает странное «удвоение» некоторых сегментов линии, возможно, из-за смещения. Если переводить координаты в моем собственном коде, удвоение отсутствует. Оба перевода добавляют целые числа.
Перевод с использованием контекста холста, некоторые линии двойных. Код:
class Turtle:
def __init__ (self):
self._canvas = __new__ (fabric.Canvas ('canvas', {'backgroundColor': 'lightgray'}))
self._canvas.onWindowResize = self.resize
self._canvas.onWindowDraw = self.draw
self._context = self._canvas.getContext ('2d')
self._context.translate (self._canvas.getWidth()/2, self._canvas.getHeight()/2)
self.reset()
def reset (self):
self._canvas.clear()
self.pensize (1)
self.color ('black')
self.down()
self._position = [0, 0]
self._heading = Math.PI/2
Перевод в моем коде приложения, как это должно выглядеть. Код:
class Turtle:
def __init__ (self):
self._canvas = __new__ (fabric.Canvas ('canvas', {'backgroundColor': 'lightgray'}))
self._canvas.onWindowResize = self.resize
self._canvas.onWindowDraw = self.draw
self._context = self._canvas.getContext ('2d')
self.reset()
def reset (self):
self._canvas.clear()
self.pensize (1)
self.color ('black')
self.down()
self._position = [self._canvas.getWidth()/2, self._canvas.getHeight()/2]
self._heading = Math.PI/2
я узнал SVG гораздо больше подходит для этой работы, и использовать его для модуля Turtle. Это подсказка о траектории приближается к движениям черепах, и когда вы увеличиваете масштаб, линии остаются гладкими. В общем, сглаживание намного лучше. –