2012-02-11 16 views
6

मंडलब्रॉट सेट बनाने के लिए मेरा प्रोग्राम एक बग है: जब भी कलम रंग बदलता है, और उसके बाद हर 42 वें पिक्सेल हल्का होता है। यह संयोग से, एक मंडलबग है (हां, मैंने अभी यह शब्द सीखा है), क्योंकि यह "किनारे" के पास कई पिक्सल के लिए असंगत है (यह वास्तव में रंग के बीच धुंधला हो सकता है और आखिरी रंग, या अगला, पिक्सेल होना चाहिए), लेकिन अगले रंग परिवर्तन तक उस के बाद यह हमेशा 42 वें पिक्सेल होता है। मैं ओएसएक्स 10.6.8, पायथन 2.7 का उपयोग कर रहा हूं। जब मैंने स्कूल में इस कार्यक्रम को लिखा, तो उसने पूरी तरह से काम किया (विंडोज़), और फिर मैंने इसे अपने पास भेज दिया, और उस पर थोड़ा और काम किया (ज्यादातर नमूना आकार और इसलिए छवि बड़ा), और इसे चला गया, मुझे यह मिला बग। संपादित करें: मेरा बुरा, मैं यह उल्लेख करना भूल गया कि यह केवल मेरे मंडेलब्रॉट कार्यक्रम के साथ होता है, मेरे घर पर कुछ अन्य कछुए कार्यक्रम ठीक हैं। स्क्रीनशॉटकछुए बिजली पिक्सल क्यों है?

पार्ट्स (ताकि आप हमेशा के लिए प्रतीक्षा करने के लिए है, जबकि कार्यक्रम क्या मैं के बारे में बात कर रहा हूँ देखने के लिए चलाता है की जरूरत नहीं है): घर से मेरा पहला संस्करण से

:

I mean, just what?

वर्तमान संस्करण (बग़ल में) से:

Please Note: this image is sideways

यहाँ कोड:

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

संपादित करें: डीएसएम द्वारा एक फिक्स का सुझाव दिया गया है, जो इस बग को पसंद करता है। हालांकि, मेरे पास पाइथन स्रोत कोड संपादित करने का कोई अनुभव नहीं है, और सभी अंडरस्कोर मुझे परेशान कर रहे हैं। क्या कोई मुझे विशेष रूप से बता सकता है कि क्या संपादित करना है और/या कैसे?

+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

क्या मैं कोई सुझाव दे सकता हूं?

मैंने आपके कोड की कोशिश की और यह हमेशा के लिए चल रहा था जिसे आप जानते हैं लेकिन आपको पता नहीं हो सकता कि ट्रैसर फ़ंक्शन है ...मैं बस अपने कोड की शुरुआत में डाल दिया:

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

कि भी गति के लिए की जरूरत (0) समारोह :)

प्रयास करें कि और इसे फिर से चलाने के लिए, मैंने किया निकल जाते हैं और यह पूरी छवि प्रदान की गई

import time 
st=time.time() 

और अंत में इस कोड:

print time.time()-st 
0 62 सेकंड में, मैं इसे शुरुआत में इस कोड को डालकर समय मॉड्यूल आयात करके समय समाप्त हो गया

वैसे भी किया गया है, मैंने अभी अपनी खुद की बहुत धीमी और कम गुणवत्ता को बनाया है, लेकिन स्क्वायर आकृति की एक सरणी का उपयोग कर रहा था और सरणी लॉल में इच्छित प्रत्येक स्थान पर मुद्रांकन कर रहा था, लेकिन इसे सुधारने की कोशिश कर रहा हूं भविष्य में क्योंकि मुझे पता चला कि कछुए एक हफ्ते पहले कम था।

एक आखिरी बात, अगर आप टाइप करें:

from turtle import * 
"आयात कछुआ" आप हर कार्य कॉल :) एक ही बात की शुरुआत में कछुआ डाल करने की आवश्यकता नहीं है के बजाय

हर दूसरे मॉड्यूल के लिए चला जाता है।

Ive में आपके फ्रैक्टल की तस्वीर शामिल है जो 62 सेकंड में मेरी मशीन पर प्रस्तुत करने के लिए ले जाती है, जो शक्तिशाली Your code run on my weak machine भी नहीं है।

मुझे आशा है कि यह सब आपको बहुत मदद करता है। आपको यह भी पता चलेगा कि मेरे पास उस प्रकाश रेखा की समस्या नहीं है, यह सुनिश्चित नहीं है कि आपने मूल कोड में उस समस्या को ठीक किया है या नहीं?

संबंधित मुद्दे