Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Turtle:为什么奇数大小的居中正方形不均匀/扭曲?_Python_Turtle Graphics - Fatal编程技术网

Python Turtle:为什么奇数大小的居中正方形不均匀/扭曲?

Python Turtle:为什么奇数大小的居中正方形不均匀/扭曲?,python,turtle-graphics,Python,Turtle Graphics,你们知道为什么当正方形的边是奇数时,下面的代码会产生扭曲的正方形吗 from turtle import * s = 67.0 pu();fd(s/2.0);rt(90.0);fd(s/2.0);pd() for _ in range(4): rt(90.0) fd(s) pu();fd(-s/2.0);rt(-90.0);fd(-s/2.0);pd() done() 我得了这样的病 上述代码在边为偶数时工作良好。使用了Python 3.5.0。我在linux、windows na

你们知道为什么当正方形的边是奇数时,下面的代码会产生扭曲的正方形吗

from turtle import *
s = 67.0

pu();fd(s/2.0);rt(90.0);fd(s/2.0);pd()
for _ in range(4):
  rt(90.0)
  fd(s)
pu();fd(-s/2.0);rt(-90.0);fd(-s/2.0);pd()

done()
我得了这样的病

上述代码在边为偶数时工作良好。使用了Python 3.5.0。我在linux、windows native和cygwin下也有同样的效果

部分解决方案(编辑):当我向
s
添加非常小的数字时,我发现一切都很好<代码>s=67.0+1e-10。但我不知道为什么

编辑:这里有一个更复杂的程序,上面的解决方案不起作用。这里我又开始在正方形中间画图形。我尝试了其他策略,从墙角开始画画,在本例中,
1e-10
解决方案有效

from turtle import *
from math import sqrt
from random import *

plg = 53 - 1e-10 # side size, even - works well, odd - not
sk = sqrt(2) / 2.0

speed(0)

def square(q):
  s = q / 2.0
  penup()
  forward(s)
  right(90)
  forward(s)
  pendown()
  begin_fill()
  for i in range(4):
    right(90)
    forward(q)
  end_fill()
  penup()
  forward(-s)
  right(-90)
  forward(-s)
  pendown()

def triangle(q,rot):
  begin_fill()
  right(45 + rot)
  forward(q * sk)
  right(-135)
  forward(q)
  right(-90)
  forward(q)
  right(-135)
  forward(q * sk)
  end_fill()
  setheading(0)

pu(); forward(-plg*10/2); left(90); forward(plg*10/2);right(90); pd()
for y in range(10):
  p = pos()
  for x in range(10):
    i = randint(0,1)
    if i==0:
      triangle(plg,randrange(0,360,90))
    else:
      square(plg)
    pu(); forward(plg); pd()
  pu();setpos(p);right(90);forward(plg);left(90);pd()

done()
很少观察到:

1) 从第5行中删除“right()”,以确保规则的正方形

2) 在范围(4)中的“for”之前加上“time.sleep(1)”,没有任何帮助,因此我们可以忽略计时问题

3) “print heading()”在每个“rt()”打印出正确的值之后,我们还可以放弃角度问题

4) 在屏幕周围快速拖动窗口会改变正方形的外观,这肯定是图形错误

5)
s=66.9999999999
返回一个偶数平方,
s=66.9999999999999
(添加一个额外的小数点)作为错误返回

6) 即使在编译代码之后,正方形仍然不均匀

海龟资料来源:

我更改了您的代码,因此它绘制了一个简单的角度:

pu();fd(s/2);rt(90.0);pd()
for x in range(2):
    rt(90.0)
    fd(s)
done()
这与您的问题相同,但如果我将
fd(s/2)
更改为
fd(s)
一切正常,为什么

这只是一个猜测(不要把它当作绝对真理,我只是好奇并试图弄明白它),但我认为这取决于你的屏幕分辨率,
odd_number%2
总是返回1,如果值从67增加到67.1,那么线会偏离1个像素。屏幕会正确读取并平均分割空间。(我的是1600x900)


如果有人有更合理的解释,就写出来!这个问题很有趣

在Mac上使用python 3.5和Yosemite 10.10.5,它绘制了一个完美的正方形


您可以在每次绘图指示后打印海龟坐标,以了解平台上发生了什么pu();fd(-s/2.0);rt(-90.0);fd(-s/2.0);fd(s);pd()并为范围(3)中的添加
在第一次定位前(+缩进)谢谢!我刚刚发现,将
1e-10
添加到
s
可以解决问题。很好,编辑您的问题,让有相同问题的人知道如何解决它!完成。但是如果你有其他的和一般的解决方案,请让我知道。添加1e-10是一个肮脏的黑客行为。好的,我会检查,保持警惕