2012-02-11 4 views
6

Mandelbrot 세트를 만드는 내 프로그램에는 버그가 있습니다. 펜이 색상을 변경하고 그 이후 42 픽셀마다 가벼울 때마다 버그가 있습니다. 이것은 우연히 만델 버그입니다 (예, 방금 배웠습니다). "가장자리"근처의 많은 픽셀에 대해 일관성이 없습니다 (사실상 그 색상과 마지막 색상 사이에 흐리게 나타날 수 있습니다. 다음 픽셀은 있어야합니다.)하지만 다음 색상이 변경 될 때까지 항상 42 번째 픽셀입니다. 나는 OSX 10.6.8, PYTHON 2.7을 사용하고있다. 학교에서이 프로그램을 만들었을 때, 완벽하게 작동하고 (Windows), 나 자신에게 보냈고, 좀 더 작업했습니다 (주로 샘플 크기로 만들어 이미지를 더 크게 만들었습니다). 곤충. 편집 : 내 나쁜, 이건 내 Mandelbrot 프로그램에서만 일어나는 것을 언급 깜빡, 내가 집에서 가지고있는 몇 가지 다른 거북 프로그램 괜찮아요. 스크린 샷왜 거북이 번개가 픽셀입니까?

부품 (프로그램이 내가 무슨 말보고 실행되는 동안 영원히 기다릴 필요가 없도록) :

내 첫 번째 버전에서 집에서 :

I mean, just what?

Please Note: this image is sideways

을 Heres

코드 : (옆으로) 현재 버전에서

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

EDIT :이 버그를 좋아하는 DSM의 수정 사항이 제안되었습니다. 그러나 파이썬 소스 코드를 편집 해 본 경험이 없으며 모든 밑줄로 인해 긴장이되고 있습니다. 누군가 편집 및/또는 어떻게해야할지 구체적으로 말해 줄 수 있습니까?

+1

컴퓨터에서 실행하려면 얼마나 걸립니까? 그것은 내 것이기도하다. –

+0

예, 알고 있습니다. 나는 내 질문에 그것을 지적했다. 그것이 스크린 샷을 제공 한 이유입니다. 자유롭게 그들을 다운로드하고 더 가까이 봐 – IronBeard

답변

6

와우. 나는 이것이 내가 좋아하는 벌레 중 하나라고 생각한다. 그리고 믿거 나 말거나, 그 숫자가 실제로 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 참조가없는 곳에서 분산시킵니다. 그러나 어쨌든, 당신은 미친 사람이 아니며, 당신이하는 일이 실제로 아무것도 아닙니다. :-)

+0

예! 알고 있었어! 나는 그것이 히치하이커 가이드 참조이었다라는 것을 알고 있었다! 성능 부분이나 어디에서오고 있는지 알지 못했습니다. 어딘가 거북이 소스에 있다고 가정 했지만요. 문제는, 내가 선을 그리는 프로그램을 만들 때 버그가 나타나지 않는다는 것입니다. 어떤 아이디어? 또한, 어떻게 self._pencolor 참조를 넣을 수 있습니까? 나는 self._pencolor라고하는 줄에 넣는가? 추신 : 이제 이것은 내가 가장 좋아하는 버그입니다. – IronBeard

0

제안을 제공 할 수 있습니까?

나는 당신의 코드를 시험해 보았습니다. 당신이 알고있는 것을 실행하는 데 영원히 걸렸지 만, 당신이 인식하지 못하는 것은 추적 기능입니다 ...나는 단순히 코드의 시작 부분에 넣어 : 또한 속도에 대한 필요성 (0) 기능 :

내가했던 그 시도하고 다시 실행을 제거

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

그것은 전체 이미지를 렌더링

print time.time()-st 
0 끝에

import time 
st=time.time() 

이 코드 62 초, I는 초기에 부호를 바꾸어 시간 모듈을 가져 와서 그것을 초과

글쎄 그건 그렇고, 필자는 훨씬 더 느리고 저품질의 제품을 만들었지 만 사각형 모양의 배열을 사용하고 배열의 각 위치에 스탬프를 넣었지만 그것을 향상 시키려고합니다. 장래에 나는 단지 1 주일 전에 거북이가 존재한다는 것을 알았습니다.

마지막으로 한가지는 당신이 입력하는 경우 :

대신 모든 함수 호출 : 같은 일의 시작 부분에 거북이를 넣어 필요가없는 "수입 거북이"의
from turtle import * 

다른 모든 모듈 간다.

필자의 컴퓨터에서 렌더링하는 데 62 초가 걸렸던 프랙탈의 그림이 Ive에 포함되어 있습니다. 그럴 수는 없습니다. Your code run on my weak machine.

이 모든 것이 도움이되기를 바랍니다. 또한 내가 그 라이트 라인 문제가 없다는 것을 알게 될 것이다. 원래 코드에서 그 문제를 해결했다면 확실하지 않을까?

관련 문제