这是我尝试使用Pygame模块对
Python 3.5中的Mandelbrot集进行编程.
import math,pygame pygame.init() def mapMandelbrot(c,r,dim,xRange,yRange): x = (dim-c)/dim y = (dim-r)/dim #print([x,y]) x = x*(xRange[1]-xRange[0]) y = y*(yRange[1]-yRange[0]) x = xRange[0] + x y = yRange[0] + y return [x,y] def checkDrawBox(surface): for i in pygame.event.get(): if i.type == pygame.QUIT: pygame.quit() elif i.type == pygame.MOUSEBUTTONDOWN: startXY = pygame.mouse.get_pos() BoxExit = False while BoxExit == False: for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONUP: BoxExit = True if BoxExit == True: return [startXY,pygame.mouse.get_pos()] pygame.draw.rect(surface,[255,0],[startXY,[pygame.mouse.get_pos()[0]-startXY[0],pygame.mouse.get_pos()[1]-startXY[1]]],1) pygame.display.update() def setup(): dimensions = 500 white = [255,255,255] black = [0,0] checkIterations = 100 canvas = pygame.display.set_mode([dimensions,dimensions]) canvas.fill(black) xRange = [-2,2] yRange = [-2,2] xRangePrev = [0,0] yRangePrev = [0,0] newxRange = [0,0] newyRange = [0,0] while True: if not ([xRange,yRange] == [xRangePrev,yRangePrev]): draw(dimensions,canvas,yRange,checkIterations) pygame.display.update() xRangePrev = xRange yRangePrev = yRange Box = checkDrawBox(canvas) if Box != None: maxX = max([Box[0][0],Box[1][0]]) maxY = max([Box[0][1],Box[1][1]]) newxRange[0] = mapMandelbrot(Box[0][0],dimensions,yRange)[0] newxRange[1] = mapMandelbrot(Box[1][0],yRange)[0] newyRange[0] = mapMandelbrot(0,Box[0][1],yRange)[1] newyRange[1] = mapMandelbrot(0,Box[1][1],yRange)[1] xRange = newxRange yRange = newyRange def draw(dim,surface,checkIterations): for column in range(dim): for row in range(dim): greyVal = iteration(0,mapMandelbrot(column,row,yRange),checkIterations,checkIterations) surface.set_at([dim-column,row],greyVal) def iteration(a,b,c,iterCount,maxIter): a = (a*a) - (b*b) + c[0] b = (2*a*b) + c[1] iterCount = iterCount - 1 if iterCount == 0: return [0,0] elif abs(a+b) > 17: b = (iterCount/maxIter)*255 return [b,b] else: return iteration(a,maxIter) setup()
我相信迭代算法是正确的,但输出看起来不正确:
想知道可能是什么问题?很抱歉代码转储,只是不确定哪个部分可能会导致它看起来像那样.
解决方法
迷人的bug – 它看起来像一个被压扁的bug