Почему черепаха осветляет пиксели? - PullRequest
7 голосов
/ 11 февраля 2012

Моя программа для создания набора Мандельброта имеет ошибку: всякий раз, когда перо меняет цвет, а каждый 42-й пиксель после этого становится светлее.Это, скорее всего, случайный человек (да, я только что выучил этот термин), так как он несовместим для многих пикселей рядом с «краем» (он может быть на самом деле размытым между цветом, который должен быть, и цветом, который последний,следующий, пиксель должен быть), но это всегда 42-й пиксель после этого до следующего изменения цвета.Я использую OSX 10.6.8, PYTHON 2.7.Когда я написал эту программу в школе, она отлично работала (Windows), а затем я отправил ее себе и немного поработал над ней (в основном просто увеличив размер выборки и, следовательно, увеличил изображение), и запустил ее, я получил этоошибка.РЕДАКТИРОВАТЬ: мой плохой, я забыл упомянуть, что это происходит только с моей программой Мандельброта, несколько других программ черепах, которые у меня дома, в порядке.пока программа запускается, чтобы увидеть, о чем я говорю):

из моей первой версии из дома:

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

РЕДАКТИРОВАТЬ: DSM предложил исправление, которому нравится эта ошибка.Тем не менее, у меня нет опыта редактирования исходного кода Python, и все подчеркивания заставляют меня нервничать.Может кто-нибудь конкретно подсказать, что редактировать и / или как?

Ответы [ 2 ]

7 голосов
/ 11 февраля 2012

Ничего себе. Я думаю, что это одна из моих любимых ошибок, и, хотите верьте, хотите нет, тот факт, что число составляет 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 в местах, где их не было. Но ты все равно не сумасшедший, и это не совсем то, что ты делаешь. : -)

1 голос
/ 07 марта 2016

Могу ли я предложить предложение?

Я попробовал ваш код, и выполнение его заняло целую вечность, о которой вы знаете, но то, что вы, возможно, не знаете, - это функция трассировки ... Я просто помещаю в начало вашего кода:

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

, что также устраняет необходимость в функции скорости (0):)

Попробуйте и запустите его снова, я сделал это, и он отрисовал все изображение за 62 секунды, я рассчитал его время, импортировав модуль времени, поместив этот код в начале:

 import time
 st=time.time()

и этот код в конце:

 print time.time()-st

Отлично, кстати, я только что сделал свой собственный, который намного медленнее и хуже, чем ваш, но использовал массив квадратной формы и штамповал для каждого местоположения, которое я хотел в массиве, lol, но постараюсь улучшить это в будущем, как я только узнал, черепаха существовала меньше недели назад.

И последнее, если вы наберете:

 from turtle import *

вместо "import turtle" вам не нужно ставить turtle в начале каждого вызова функции :) То же самое относится и к любому другому модулю.

Я включил изображение вашего фрактала, на рендеринг которого у меня ушло 62 секунды, даже не такой мощный Ваш код работает на моей слабой машине .

Надеюсь, все это вам очень поможет. Кроме того, вы заметите, что у меня нет этой проблемы со световой линией, не уверен, что вы исправили эту проблему в исходном коде вверху?

...