我正在尝试为我的Transcrypt Python到JavaScript编译器编写简单的海龟图形。为了与CPython Turtle模块兼容,我需要使用carthesian坐标,即原点必须位于画布的中心。有没有什么方法可以实现这一点,我自己不使用单独的坐标系,并在我自己的代码中为每个对象转换它们。
我已经看到,对于单个对象,我可以使用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
答案 0 :(得分:1)
为了避免“加倍”效应,你可以试试这个:
self._context.translate (round(self._canvas.getWidth () / 2), round(self._canvas.getHeight () / 2))