检测tkinter模式是否重复

时间:2015-05-11 00:44:20

标签: python canvas tkinter graphic

我有一个绘制图案的程序(更具体地说是一个螺旋计)。经过一段时间后,它将不可避免地开始重演。我需要一种方法来检测何时发生。

有几种方法可以解决这个问题。

  1. 检测线条绘制的位置是否位于黑色像素的顶部。在此重复几次后停止
  2. 以某种方式预先计算完成模式所需的迭代次数
  3. 测试与旧的相交的新线
  4. 存储绘制的所有点,然后在生成的新点与旧点相同时停止。
  5. 哪种方法最好?

1 个答案:

答案 0 :(得分:1)

方法一出局,随着研究的开展,tkinter画布没有直接的方法来确定它们上给定像素的颜色。方法2将非常复杂,超出我的能力。方法3是不切实际的,因为正常模式经常自相交。但方法4对我有用。以下是我的表现方式:

#Detection of whether pattern is repeating itself
        if point2 not in previousPositions:
            previousPositions.append(point2)
            inarow = 0
        else:
            inarow += 1

        if inarow > 5:
            print "Pattern is detected to be repeating itself"
            run = 0

这是一个循环,将run设置为零会停止循环。只要5个新点与先前绘制的点相匹配,就可以成功停止绘制图案

可能的缺陷

在图表结束之前,某些模式最终可能会有与其他点匹配的点。不太可能发生这种情况超过5次。为此,grapher必须以不同的顺序在相同的点上以不同的方向移动。这可以通过计算出现的点的顺序来解决。但是,重复发生这种情况极不可能,而且我无法找到导致此问题的模式。