7

マンデルブロ集合を作成するための私のプログラムにはバグがあります。ペンの色が変わるたびに、その後42ピクセルごとに明るくなります。これは、偶然にも、マンデルバグです(そうです、私はその用語を学びました)。これは、「エッジ」の近くの多くのピクセルで一貫性がないためです(実際には、本来あるべき色と最後の色の間でぼやけている可能性があります。次に、ピクセルは)であるはずですが、次の色が変わるまで、常にそのピクセルから42番目のピクセルになります。OSX 10.6.8、PYTHON2.7を使用しています。私が学校でこのプログラムを書いたとき、それは完全に機能し(Windows)、それから私はそれを自分自身に送って、もう少し作業し(主にサンプルサイズを作成して画像を大きくするだけです)、それを実行しました、私はこれを手に入れましたバグ。編集:私の悪い、これは私のマンデルブロプログラムでのみ発生することを言及するのを忘れました、

スクリーンショットの一部(プログラムの実行中に私が話していることを確認するために永遠に待つ必要がないように):

自宅からの私の最初のバージョンから:

つまり、何ですか?

現在のバージョンから(横向き):

注意:この画像は横向きです

コードは次のとおりです。

import turtle
import math
turtle.speed(0)
def benoit(onelen):
    turtle.left(90)
    for x in range(-2*onelen, onelen):
        turtle.up()
        turtle.goto(x, int(-1.5*onelen)-1)
        turtle.down()
        for y in range(int(-1.5*onelen)-1, int(1.5*onelen)-1):
            z = complex(0,0)
            c = complex(x*1.0/onelen,y*1.0/onelen)
            for k in range(20):
                z = z*z+c
                if abs(z) > 2:
                    g = .2 + .8*(20-k)/20
                    break
                if k == 19:
                    g = 0
            turtle.pencolor(0,g,0)
            turtle.forward(1)
benoit(250)
x = raw_input("Press Enter to Exityadayadayada")

編集:このバグが好きなDSMによって修正が提案されました。しかし、私はPythonソースコードを編集した経験がなく、すべてのアンダースコアが私を緊張させています。誰かが具体的に何を編集するか、および/またはどのように私に教えることができますか?

4

2 に答える 2

7

わお。これは私のお気に入りのバグの 1 つだと思います。信じられないかもしれませんが、その数がたまたま 42 であるという事実は実際に関係があります。まあ、とにかく、周辺的に.. turtle.py:

   def _goto(self, end):
        """Move the pen to the point end, thereby drawing a line
        if pen is down. All other methodes for turtle movement depend
        on this one.

[...]

    ######    vererbung!!!!!!!!!!!!!!!!!!!!!!
    self._position = end
    if self._creatingPoly:
        self._poly.append(end)
    if len(self.currentLine) > 42: # 42! answer to the ultimate question
                                   # of life, the universe and everything
        self._newLine()
    self._update() #count=True)

したがって、明らかにパフォーマンス上の理由から、行を分割することを決定したときに問題が発生します。

def _newLine(self, usePos=True):
    """Closes current line item and starts a new one.                                              
       Remark: if current line became too long, animation                                          
       performance (via _drawline) slowed down considerably.                                       
    """

行番号の制限を増やしたり、self._pencolor 参照が存在しない場所に散らばったりすることで、バグを「修正」することができました。とにかく、あなたは頭がおかしいわけではありません。:-)

于 2012-02-11T18:30:02.867 に答える