2012-02-11 34 views
6

Chương trình của tôi để tạo tập hợp Mandelbrot có lỗi: bất cứ khi nào bút thay đổi màu sắc và mỗi pixel 42 sau đó sẽ sáng hơn. Điều này, một cách ngẫu nhiên, một con mandelbug (vâng, tôi chỉ biết thuật ngữ đó), vì nó không nhất quán với nhiều điểm ảnh gần một "cạnh" (nó thực sự có thể bị mờ giữa màu sắc và màu cuối cùng, hoặc tiếp theo, pixel được cho là), nhưng nó luôn là điểm ảnh thứ 42 sau điểm ảnh đó cho đến khi thay đổi màu tiếp theo. Tôi đang sử dụng OSX 10.6.8, PYTHON 2.7. Khi tôi viết chương trình này ở trường, nó hoạt động hoàn hảo (Windows), và sau đó tôi gửi nó cho chính mình, và làm việc nhiều hơn một chút (chủ yếu chỉ làm kích thước mẫu và vì thế hình ảnh lớn hơn), và chạy nó, tôi hiểu lỗi. EDIT: xấu của tôi, tôi quên đề cập đến điều này chỉ xảy ra với chương trình Mandelbrot của tôi, vài chương trình rùa khác tôi có ở nhà là tốt.Tại sao điểm ảnh làm sáng rùa?

Các bộ phận của ảnh chụp màn hình (do đó bạn không cần phải chờ đợi mãi mãi trong khi chương trình chạy để xem những gì tôi đang nói về):

Từ phiên bản đầu tiên của tôi từ nhà:

I mean, just what?

Từ phiên bản hiện tại (ngang):

Please Note: this image is sideways

Heres mã:

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: Một bản sửa lỗi đã được đề xuất bởi DSM, người thích lỗi này. Tuy nhiên, tôi không có kinh nghiệm chỉnh sửa mã nguồn Python, và tất cả các dấu gạch dưới đang khiến tôi lo lắng. Ai đó có thể cho tôi biết cụ thể những gì cần chỉnh sửa và/hoặc làm thế nào?

+1

Mất bao lâu để chạy ứng dụng này trên máy của bạn? Nó được lấy mãi mãi trên tôi. –

+0

Vâng, tôi biết, đó là nghĩa vụ phải làm điều đó; Tôi chỉ ra điều đó trong câu hỏi của mình. Đó là lý do tại sao tôi cung cấp các ảnh chụp màn hình; cảm thấy tự do để tải xuống và xem xét kỹ hơn – IronBeard

Trả lời

6

Wow. Tôi nghĩ rằng đây là một trong những lỗi yêu thích của tôi bao giờ hết, và tin hay không, thực tế là số lượng xảy ra là 42 thực sự có liên quan! Vâng, ngoại biên, dù sao đi nữa .. Trong 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) 

Vì vậy, vấn đề đến khi nó quyết định để phá vỡ một đường, rõ ràng là vì lý do hiệu suất:

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

tôi đã có thể " sửa "lỗi bằng cách tăng giới hạn lanh và/hoặc phân tán tham chiếu self._pencolor ở những nơi không có bất kỳ lỗi nào. Nhưng bạn không điên, dù sao, và nó không thực sự bất cứ điều gì mà bạn đang làm. :-)

+0

CÓ! TÔI BIẾT MÀ! Tôi biết đó là một tài liệu hướng dẫn Hitchhikers Guide! Không biết phần hiệu suất hoặc nó đến từ đâu, mặc dù tôi cho rằng nó ở trong nguồn rùa ở đâu đó. Vấn đề là, khi tôi thực hiện một chương trình chỉ vẽ một đường, lỗi đó không hiển thị. Bất kỳ ý tưởng? Ngoài ra, làm cách nào để đặt tham chiếu self._pencolor? tôi chỉ cần đặt trong dòng nói self._pencolor? PS: đây cũng là lỗi yêu thích của tôi. – IronBeard

0

Tôi có thể đưa ra đề xuất không?

tôi đã thử mã của bạn và nó đã được dùng mãi mãi để chạy mà bạn nhận thức được nhưng những gì bạn có thể không biết là chức năng truy tìm ...tôi chỉ cần đặt vào đầu của mã của bạn:

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

đó cũng loại bỏ sự cần cho tốc độ (0) chức năng :)

Hãy thử điều đó và chạy nó một lần nữa, tôi đã làm và nó trả lại toàn bộ hình ảnh trong 62 giây, tôi hẹn giờ nó bằng cách nhập các module thời gian bằng cách đặt mã này ở phần đầu:

import time 
st=time.time() 

và mã này ở cuối:

print time.time()-st 

Cũng được thực hiện bằng cách này, Ive chỉ làm của riêng tôi thats rất nhiều chậm hơn và chất lượng thấp hơn sau đó của bạn nhưng đã sử dụng một mảng của hình vuông và dán tem đến từng vị trí tôi muốn trong mảng lol, nhưng sẽ cố gắng để cải thiện nó trong tương lai như tôi chỉ phát hiện ra rùa tồn tại ít hơn một tuần trước đây.

Một điều cuối cùng, nếu bạn gõ:

from turtle import * 

thay vì "rùa nhập khẩu" bạn không cần phải đưa rùa vào đầu của mỗi cuộc gọi chức năng :) điều cũng áp dụng cho tất cả các mô-đun khác.

Tôi đã bao gồm pic của fractal mất 62 giây để hiển thị trên máy tính của tôi mà thậm chí không mạnh mẽ Your code run on my weak machine.

Tôi hy vọng tất cả điều này sẽ giúp bạn rất nhiều. bạn cũng sẽ nhận thấy tôi không có vấn đề dòng ánh sáng, không chắc chắn nếu bạn cố định vấn đề đó trong mã gốc lên hàng đầu?

Các vấn đề liên quan