turtle.setworldcoordinates函数有什么作用?

时间:2016-05-11 06:00:34

标签: python turtle-graphics

初学者的Python书往往对中间页面变得更加陡峭,几乎无法解释任何内容。因此,我很难想象turtle.setworldcoordinates函数在被我无法通过读取非常无益的文档而无法通过一些想法进行经验推断而无法做到这一点之后所做的功能。文档。有人可以指出这个功能在乌龟图形中做了什么吗?

1 个答案:

答案 0 :(得分:2)

由于turtle.py附带了Python,并且是用Python编写的,你可以查看源代码来查看函数的作用(我发现我使用turtle.py做了很多事情)见下文。

我相信setworldcoordinates()允许您选择更方便您的问题的坐标系。例如,假设您不希望(0,0)位于屏幕中央。如果对您更有效,可以使用setworldcoordinates()将其移动到角落,而不是合并偏移量。您还可以设置在水平与垂直方向上具有不同缩放系数的坐标系。

例如,请参阅my answer to this question,其中我定义了一个例程,该例程使用setworldcoordinates()来缩放您绘制的任何内容,而无需将任何缩放因子合并到您自己的绘图代码中。

或者您可以在(0,0),(1,0),(0,1)和(1,1)处设置角点坐标系,以完全在单位平方内工作。

棘手的一点是它将您的坐标系统映射到现有的窗口形状 - 因此您必须将坐标调整到窗口或重塑窗口以匹配您的坐标系。否则,您可能会发现自己的宽高比不合适。

def setworldcoordinates(self, llx, lly, urx, ury):
    """Set up a user defined coordinate-system.

    Arguments:
    llx -- a number, x-coordinate of lower left corner of canvas
    lly -- a number, y-coordinate of lower left corner of canvas
    urx -- a number, x-coordinate of upper right corner of canvas
    ury -- a number, y-coordinate of upper right corner of canvas

    Set up user coodinat-system and switch to mode 'world' if necessary.
    This performs a screen.reset. If mode 'world' is already active,
    all drawings are redrawn according to the new coordinates.

    But ATTENTION: in user-defined coordinatesystems angles may appear
    distorted. (see Screen.mode())

    Example (for a TurtleScreen instance named screen):
    >>> screen.setworldcoordinates(-10,-0.5,50,1.5)
    >>> for _ in range(36):
    ...     left(10)
    ...     forward(0.5)
    """
    if self.mode() != "world":
        self.mode("world")
    xspan = float(urx - llx)
    yspan = float(ury - lly)
    wx, wy = self._window_size()
    self.screensize(wx-20, wy-20)
    oldxscale, oldyscale = self.xscale, self.yscale
    self.xscale = self.canvwidth / xspan
    self.yscale = self.canvheight / yspan
    srx1 = llx * self.xscale
    sry1 = -ury * self.yscale
    srx2 = self.canvwidth + srx1
    sry2 = self.canvheight + sry1
    self._setscrollregion(srx1, sry1, srx2, sry2)
    self._rescale(self.xscale/oldxscale, self.yscale/oldyscale)
    self.update()
  

我的书给出了一个奇怪的例子:setworldcoordinates(-10,0.5,   1,2),你能告诉我这个操作究竟是做什么的吗?

setworldcoordinates()的这些奇怪的例子比比皆是,但解释得很少,例如@ TessellatingHeckler的幻灯片。他们只是表明你可以用坐标做极端的事情。但是要回答你的后续问题,如果我们有一个100乘100的窗口,这就是那个特定的调用将对我们的坐标系做什么:

enter image description here