这是我尝试使用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
总结
以上是DEVMAX为你收集整理的python – Mandelbrot设置显示不正确全部内容。
如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站 推荐给好友。