【问题标题】:Turtle bending lines海龟弯曲线
【发布时间】:2014-09-26 16:34:43
【问题描述】:

在下面的代码中,绘制的第二个框被弄乱了。这几乎就像线条不是笔直地向上和向下绘制的,而是以一个微小的角度绘制的。我已经尝试制作示例 MCVE。

import turtle, os

turtle.speed(0)
iOneAndHalve = 1.5    # Increasing to 1.501 makes a big difference
Q = 0
iSize = 80

def box(x):
    for i in xrange(x):
        turtle.forward(i+1)
        turtle.left(90)
    global Q
    Q = i

box(iSize)

turtle.up()
turtle.forward(iOneAndHalve*Q)    # <----------
turtle.down()

box(iSize)

os.system("pause")

如果我将iOneAndHalve 设置为1.501 而不是1.5,问题就解决了。盒子的大小(因此Q 似乎没有区别)。

我不知道为什么这样做会奏效,而且这闻起来像是一种廉价的修复方法。

是什么导致了这种(不稳定的)行为,我应该如何正确解决这个问题?

注意:我意识到编码的风格是不合标准的。恐怕这是 MCVE 的结果。

【问题讨论】:

  • “盒子的大小(以及 Q)似乎没有影响。” 您还尝试过哪些其他尺寸?只要我为iSize 使用奇数,结果对我来说看起来还不错。
  • @Kevin 你是对的。在原始代码中,还有一个距离为.5*Q 的转发,这可能导致了其他错误。

标签: python-2.7 turtle-graphics


【解决方案1】:

这似乎是四舍五入的问题,因为将 turtle.forward(iOneAndHalve*Q) 替换为 turtle.forward(round(iOneAndHalve * Q, 0)) 可以解决问题。

【讨论】:

  • 我同意,这似乎是由于尝试forward 的一小部分引起的。 iOneAndHalve*Q 等于 118.5,所以如果你不取整,乌龟最终会在两个像素之间“在栅栏上”,并且偶尔会改变它倾向于哪一侧。
  • @Kevin 是的,我就是这么想的。在海龟方面似乎有点设计错误,因为 IMO 海龟应该为你做四舍五入。为什么它改变了一面也很奇怪......
  • 绝对可以。我不明白虽然在围栏上如何使它恰好在中途交换。每个值都应该具有一种或另一种行为。不要在它们之间切换。
猜你喜欢
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多