Python龟位置错误

时间:2016-03-25 17:01:14

标签: python turtle-graphics

我一直在尝试通过单轴绘制Turtle绘图,经过一些测试后,我设法完成了以下功能:

def DrawSquare(length=50.0, Yscale=2):

   setheading(0)

   for n in range(0,4):
      oldYcor = int(ycor())
      oldPos = pos()
      penup()
      forward(length)
      newYcor = int(ycor())

      print 'OldYcor = ', int(oldYcor)
      print 'NewYcor = ', int(newYcor)
      print '------'

      setpos(oldPos)
      pendown()

      if (oldYcor == newYcor):
          print 'dont scale'          
          forward(length)
      elif (oldYcor != newYcor):
          print 'scale'
          forward(length*Yscale)

      left(90)

penup()
speed('slowest')
goto(0,0)

#TESTS
DrawSquare(50.0, 2)
DrawSquare(50.0, 2)
DrawSquare(50.0, 2)
DrawSquare(50.0, 2)

这些测试的输出应该只是在y轴上缩放的四个重叠方块,但是由于一些非常奇怪的原因,Python在移动1个单位之前和之后随机改变我的Y值,当它们应该相同时。 (例如,水平绘制的一条线具有99的oldYcor,但是newYcor为100),这完全破坏了我的代码并产生了不正确的方块。

我注意到的另一个奇怪的事情是,如果不将乌龟的ycor()转换为int,那么打印语句会显示一些对我来说没有任何意义的奇怪值......

我感谢任何帮助!!

1 个答案:

答案 0 :(得分:0)

虽然Python的龟图形为龟图像本身提供了所有常见的变换(比例,剪切,倾斜等),但它并没有为它绘制的图像提供它们!不是为您定义的每个绘图例程添加缩放因子,而是尝试独立于绘图例程操作图像比例:

from turtle import *
import time

SCREEN_WIDTH = 400
SCREEN_HEIGHT = 400

def DrawSquare(length=1):

    oldPos = pos()
    setheading(0)
    pendown()

    for n in range(0, 4):
        forward(length)
        left(90)

    setpos(oldPos)

def Scale(x=1, y=1):
    screen = Screen()
    screen.setworldcoordinates(- (SCREEN_WIDTH / (x * 2)), - (SCREEN_HEIGHT / (y * 2)), (SCREEN_WIDTH / (x * 2)), (SCREEN_HEIGHT / (y * 2)))

setup(SCREEN_WIDTH, SCREEN_HEIGHT)
mode("world")

penup()
goto(-25, -25)

# TESTS

Scale(1, 1) # normal size
DrawSquare(50)
time.sleep(2)

Scale(1, 2)  # twice as tall
time.sleep(2)

Scale(2, 1)  # twice as wide
time.sleep(2)

Scale(2, 2)  # twice as big
time.sleep(2)

Scale(1, 1)  # back to normal

done()

只需设置Scale(1, 2)即可在Y尺寸上绘制两倍大的内容。在绘制它之前或之后。