我正在尝试用python的乌龟图形绘制mandelbrot序列。我使用两个类,一个代表mandelbrot序列。
class Mandelbrot:
def __init__(self,c,limit=50):
self.__limit = int(limit)
self.__colormap = ['black','white']
self.__cardinality = limit
z = 0
for i in range(limit):
z = z * z + c
if abs(z) > 2:
self.__cardinality = i
return
def getColor(self):
if self.__cardinality == self.__limit:
return self.__colormap[0]
return self.__colormap[1]
另一个类代表乌龟展示。
import turtle
from mandelbrot import *
class Display:
def __init__(self):
self.t = turtle.Turtle()
self.t.ht();self.t.turtlesize(1)
self.t.speed(0)
turtle.tracer(2000,0)
for x in range(-150,151):
for y in range(-150,151):
self.t.color(Mandelbrot(turtleConvert(x,y)).getColor())
self.t.goto(x,y)
def turtleConvert(x,y): #converts from turtle pixels to the complex plane
return complex((x/300)*4,(y/300)*4)
当我创建一个显示类的实例时,程序会运行,但只打印分形的下半部分。任何人都可以提供解决方案吗?
这是我的结果的图片。
答案 0 :(得分:2)
在我的系统(OSX)上,您的程序会产生整个分形:
所以这可能是Python龟或Tkinter实现特定的。 (将您的系统详细信息添加到您的问题中或作为评论后添加。)
然而,我会解决几个不相关的问题。首先,为您绘制的每个点创建一个新的Mandelbrot实例 - 您只需要根据需要调用一个实例:tracer()
您的主程序已修订为使用此mandelbrot.py,并稍微更改了from turtle import Turtle, Screen
from mandelbrot import *
class Display:
def __init__(self, screen):
self.t = Turtle(visible=False)
self.t.speed('fastest')
screen.tracer(0)
mandelbrot = Mandelbrot()
for x in range(-150, 151):
for y in range(-150, 151):
mandelbrot.computeCardinality(turtleConvert(x, y))
self.t.color(mandelbrot.getColor())
self.t.goto(x, y)
screen.update()
screen.tracer(1)
def turtleConvert(x, y): # converts from turtle pixels to the complex plane
return complex(x / 75, y / 75)
screen = Screen()
dummy = Display(screen)
screen.mainloop()
逻辑:
from datetime import datetime
class Customer(models.Model):
last_updated = models.DateTimeField(auto_now_add=True)
#...some more code...
@property
def is_past_due(self):
return (datetime.now(timezone.utc) - self.last_updated).days>1
第二个问题是,如果你看一下我上面生成的图像,你会看到它上面有轻微的曲线。您可能会也可能不会遇到这些,这取决于您使用的系统。如果你确实得到了这些,或者只是想了解它们,请参阅:
答案 1 :(得分:2)
我在Linux Mint上遇到同样的问题,但是我看到它会绘制上半部分,之后会删除它。
问题是因为当下一栏中乌龟从上到下移动时goto(x,y)
绘制白线 - 即。从(0, 150)
到(1, -150)
- 此行会删除部分图片。
您必须手动移动它而不绘制线
for x in range(-150,151):
for y in range(-150,151):
self.t.color(Mandelbrot(turtleConvert(x,y)).getColor())
self.t.goto(x,y)
# move to bottom in next column without creating white line
self.t.up()
self.t.goto(x+1, -150)
self.t.down()
或者在开始每一个新专栏之前移动它
for x in range(-150, 151):
# move to bottom without creating white line
self.t.up()
self.t.goto(x, -150)
self.t.down()
for y in range(-150, 151):
self.t.color(Mandelbrot(turtleConvert(x,y)).getColor())
self.t.goto(x,y)