2012-02-11 9 views
6

Mandelbrot seti oluşturma programımın bir hatası vardır: kalem her renk değiştirdiğinde ve bundan sonra her 42. pikselde, daha açıktır. Bu, tesadüfen, bir mandelbug (evet, bu terimi öğrendim), çünkü bir "kenar" yakınındaki birçok piksel için tutarsız (aslında olması gereken renk ve sonuncu renk arasında bulanık olabilir veya sonraki, piksel olması gerekiyordu), ama her zaman bir sonraki renk değişimine kadar o bir 42nd piksel. OSX 10.6.8, PYTHON 2.7 kullanıyorum. Bu programı okulda yazdığımda mükemmel çalıştı (Windows), sonra da kendime yolladım ve üzerinde biraz daha fazla çalıştı (çoğunlukla sadece örneklem büyüklüğünü ve dolayısıyla görüntüyü büyütmek için) ve çalıştırdım. böcek. DÜZENLEME: Benim kötülük, bu sadece benim Mandelbrot programı ile gerçekleştiğini söylemeyi unutmuşum, evde sahip olduğum diğer birkaç kaplumbağa programı iyi. ekran görüntüleriNeden kaplumbağa pırıltıları aydınlatıyor?

Parçaları (programım bahsettiğimi görmek için çalışır iken sonsuza kadar beklemek zorunda kalmamak için):

benim ilk sürümü itibaren evden:

I mean, just what?

Please Note: this image is sideways

İşte

kod: (enine) güncel sürümü itibaren

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") 

DÜZENLEME: Bu hatadan hoşlanan DSM tarafından bir düzeltme önerilmiştir. Ancak, Python kaynak kodunu düzenleme konusunda tecrübem yok ve tüm alt çizgiler beni tedirgin ediyor. Birisi bana özellikle neyi ve/veya nasıl düzenleyeceğini söyleyebilir mi?

+1

Bunu makinenizde çalıştırmak ne kadar sürer? Benim için sonsuza dek sürüyor. –

+0

Evet, biliyorum, bunu yapması gerekiyordu; Sorumu içinde belirttim. Bu yüzden ekran görüntülerini sağladım; onları indirmek ve daha yakından bakmak için çekinmeyin – IronBeard

cevap

6

Vay. Bu benim en sevdiğim hatalardan biri olduğunu düşünüyorum ve inanıyorum ya da değil, sayı 42 olması gerçeği aslında ilgili! Eh, periferik olarak, nasıl olsa .. turtle.py olarak :

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) 

Yani sorun görünüşte performans nedenleriyle, bir çizgi mola vermeye karar etmesi ile ortaya çıkan:

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.          
    """ 

Ben "başardı herhangi bir şey yoktu yerlerde çarşafumber limit çarparak ve/veya self._pencolor referanslar saçma hata düzeltin. Ama yine de çılgın değilsin, ve gerçekten yaptığın bir şey değil. :-)

+0

EVET! BİLİYORDUM! Bir Otostop Rehberi referansı olduğunu biliyordum! Performans parçasını ya da nereden geldiğini bilmiyordum, ancak kaplumbağanın bir yerinde olduğunu varsaydım. Sorun şu ki, sadece bir çizgi çizen bir program yaptığımda, hata görünmüyor. Herhangi bir fikir? Ayrıca, self._pencolor referanslarını nasıl koyabilirim? self._pencolor yazan satırları mı koydum? PS: Bu şimdi de en sevdiğim hata. – IronBeard

0

Bir öneri sunabilir miyim?

Kodunuzu denedim ve farkında olduğunuzu çalıştırmak için sonsuza dek sürüyordu ama farkında olmadığınız şey izleme işlevi ...ben sadece kod başında koyun: ayrıca hız ihtiyacını (0) işlevi :)

ben yaptım, o deneyin ve yeniden çalıştırın ortadan kaldırır

wn=turtle.Screen() 
wn.tracer(10000) 

ve tüm görüntüyü render

print time.time()-st 
0: sonunda

import time 
st=time.time() 

ve bu kodun: 62 saniye içinde, i başında bu kodu koyarak zamanı modülü ithal ederek zaman aşımına

Bu arada, Ive sadece kendiminkinden çok daha yavaş ve daha düşük kaliteyi yaptım ama dizinin bir dizi kare şeklini kullanıyordum ve dizi dizisinde istediğim her yere damga atıyordum ama onu geliştirmeye çalışacağım Gelecekte, sadece bir hafta önce daha az kaplumbağanın bulunduğunu keşfettim.

Son bir şey, yazarsanız:

yerine her işlev çağrısı :) Aynı şey başında kaplumbağa koymak gerek yok "ithal kaplumbağa" nin
from turtle import * 

her modül için de geçerli.

Ive bile güçlü Your code run on my weak machine benim makine thats değil üzerinde işlemek için 62 saniye sürdü senin fraktal pic dahil.

Umarım tüm bunlar size çok yardımcı olur. Ayrıca bu ışık hattı sorununa sahip olmadığımı fark edersiniz, orijinal kodun üstünde bu sorunu çözdüğünüzden emin değil misiniz?

İlgili konular