答案 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的窗口,这就是那个特定的调用将对我们的坐标系做什么: