Python 3.7 turtle绘制正多边形宽度超出预期被压扁如何排查
问题原因
你的绘制逻辑本身没有问题,正多边形边长、旋转角度的计算都是正确的,图形被压扁是坐标系映射和窗口实际宽高比不匹配导致的:
- 你用
setworldcoordinates把逻辑坐标系设成了100x100的正方形,但turtle默认生成的窗口不是严格的正方形,横向像素数比纵向多,逻辑坐标映射到物理像素的时候,X方向的单位长度对应的实际像素比Y方向的大,就会出现水平方向被拉伸、图形压扁的情况。 - 另外
screensize设置的是画布的滚动区域大小,不是弹出窗口的实际显示尺寸,也不会影响显示比例。
修复方案
你可以修改代码保证显示的宽高比和逻辑坐标系比例一致,推荐使用以下方案:
在调用setworldcoordinates之前添加一行设置正方形窗口的代码即可:
# 第一个参数是窗口宽度像素,第二个是高度像素,设为相同值即可得到正方形窗口 turtle.setup(width=600, height=600)
调整后窗口的物理宽高比为1:1,和你设置的100x100逻辑坐标系比例一致,就不会出现拉伸变形的问题。
完整修复后参考代码
import turtle bgColor = "teal" worldX = 100 worldY = 100 # 新增设置正方形窗口的代码 turtle.setup(width=600, height=600) turtle.screensize(bg=bgColor) turtle.setworldcoordinates(0,worldX,worldY,0) #Canvas is 100 x 100, with (0,0) being the upper left corner and (100,100) being the lower right corner tr = turtle.Turtle() tr.speed(6) tr.color("black") length = 5 #Length of sides you want sides = 4 #Number of sides for shape tr.penup() tr.goto(worldX/2, worldY/2) #Go to center of canvas tr.pendown() for i in range(sides): tr.forward(length) tr.right(360/sides) turtle.done()
内容的提问来源于stack exchange,提问作者andmar204
相关产品推荐
相关产品推荐

