我一直在尝试通过单轴绘制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,那么打印语句会显示一些对我来说没有任何意义的奇怪值......
我感谢任何帮助!!
答案 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尺寸上绘制两倍大的内容。在绘制它之前或之后。