1. 曼德勃罗集

import numpy as np

import pylab as pl

import time

from matplotlib import cm

def iter_point(c):

z = c

for i in xrange(1, 100): # 最多迭代100次

if abs(z)>2: break # 半径大于2则认为逃逸

z = z*z+c

return i # 返回迭代次数

def draw_mandelbrot(cx, cy, d):

"""

绘制点(cx, cy)附近正负d的范围的Mandelbrot

"""

x0, x1, y0, y1 = cx-d, cx+d, cy-d, cy+d

y, x = np.ogrid[y0:y1:200j, x0:x1:200j]

c = x + y*1j

start = time.clock()

mandelbrot = np.frompyfunc(iter_point,1,1)(c).astype(np.float)

print "time=",time.clock() - start

pl.imshow(mandelbrot, cmap=cm.jet, extent=[x0,x1,y0,y1])

pl.gca().set_axis_off()

x,y = 0.27322626, 0.595153338

pl.subplot(231)

draw_mandelbrot(-0.5,0,1.5)

for i in range(2,7):

pl.subplot(230+i)

draw_mandelbrot(x, y, 0.2**(i-1))

pl.subplots_adjust(0.02, 0, 0.98, 1, 0.02, 0)

pl.show()

2. 分形树叶

import numpy as np

import matplotlib.pyplot as pl

import time

# 蕨类植物叶子的迭代函数和其概率值

eq1 = np.array([[0,0,0],[0,0.16,0]])

p1 = 0.01

eq2 = np.array([[0.2,-0.26,0],[0.23,0.22,1.6]])

p2 = 0.07

eq3 = np.array([[-0.15, 0.28, 0],[0.26,0.24,0.44]])

p3 = 0.07

eq4 = np.array([[0.85, 0.04, 0],[-0.04, 0.85, 1.6]])

p4 = 0.85

def ifs(p, eq, init, n):

"""

进行函数迭代

p: 每个函数的选择概率列表

eq: 迭代函数列表

init: 迭代初始点

n: 迭代次数

返回值: 每次迭代所得的X坐标数组, Y坐标数组, 计算所用的函数下标

"""

# 迭代向量的初始化

pos = np.ones(3, dtype=np.float)

pos[:2] = init

# 通过函数概率,计算函数的选择序列

p = np.add.accumulate(p)

rands = np.random.rand(n)

select = np.ones(n, dtype=np.int)*(n-1)

for i, x in enumerate(p[::-1]):

select[rands

# 结果的初始化

result = np.zeros((n,2), dtype=np.float)

c = np.zeros(n, dtype=np.float)

for i in range(n):

eqidx = select[i] # 所选的函数下标

tmp = np.dot(eq[eqidx], pos) # 进行迭代

pos[:2] = tmp # 更新迭代向量

# 保存结果

result[i] = tmp

c[i] = eqidx

return result[:,0], result[:, 1], c

start = time.clock()

x, y, c = ifs([p1,p2,p3,p4],[eq1,eq2,eq3,eq4], [0,0], 100000)

time.clock() - start

pl.figure(figsize=(6,6))

pl.subplot(121)

pl.scatter(x, y, s=1, c="g", marker="s", linewidths=0)

pl.axis("equal")

pl.axis("off")

pl.subplot(122)

pl.scatter(x, y, s=1,c = c, marker="s", linewidths=0)

pl.axis("equal")

pl.axis("off")

pl.subplots_adjust(left=0,right=1,bottom=0,top=1,wspace=0,hspace=0)

pl.gcf().patch.set_facecolor("#D3D3D3")

pl.show()

3. 其它分形图(科赫曲线、分形龙、谢尔宾斯基三角等)

from math import sin, cos, pi

import matplotlib.pyplot as pl

from matplotlib import collections

class L_System(object):

def __init__(self, rule):

info = rule['S']

for i in range(rule['iter']):

ninfo = []

for c in info:

if c in rule:

ninfo.append(rule[c])

else:

ninfo.append(c)

info = "".join(ninfo)

self.rule = rule

self.info = info

def get_lines(self):

d = self.rule['direct']

a = self.rule['angle']

p = (0.0, 0.0)

l = 1.0

lines = []

stack = []

for c in self.info:

if c in "Ff":

r = d * pi / 180

t = p[0] + l*cos(r), p[1] + l*sin(r)

lines.append(((p[0], p[1]), (t[0], t[1])))

p = t

elif c == "+":

d += a

elif c == "-":

d -= a

elif c == "[":

stack.append((p,d))

elif c == "]":

p, d = stack[-1]

del stack[-1]

return lines

rules = [

{

"F":"F+F--F+F", "S":"F",

"direct":180,

"angle":60,

"iter":5,

"title":"Koch"

},

{

"X":"X+YF+", "Y":"-FX-Y", "S":"FX",

"direct":0,

"angle":90,

"iter":13,

"title":"Dragon"

},

{

"f":"F-f-F", "F":"f+F+f", "S":"f",

"direct":0,

"angle":60,

"iter":7,

"title":"Triangle"

},

{

"X":"F-[[X]+X]+F[+FX]-X", "F":"FF", "S":"X",

"direct":-45,

"angle":25,

"iter":6,

"title":"Plant"

},

{

"S":"X", "X":"-YF+XFX+", "Y":"+XF-YFY-FX+",

"direct":0,

"angle":90,

"iter":6,

"title":"Hilbert"

},

{

"S":"L--F--L--F", "L":"+R-F-R+", "R":"-L+F+",

"direct":0,

"angle":45,

"iter":10,

"title":"Sierpinski"

},

]

def draw(ax, rule, iter=None):

if iter!=None:

rule["iter"] = iter

lines = L_System(rule).get_lines()

linecollections = collections.LineCollection(lines)

ax.add_collection(linecollections, autolim=True)

ax.axis("equal")

ax.set_axis_off()

ax.set_xlim(ax.dataLim.xmin, ax.dataLim.xmax)

ax.invert_yaxis()

fig = pl.figure(figsize=(7,4.5))

fig.patch.set_facecolor("papayawhip")

for i in xrange(6):

ax = fig.add_subplot(231+i)

draw(ax, rules[i])

fig.subplots_adjust(left=0,right=1,bottom=0,top=1,wspace=0,hspace=0)

pl.show()

------------------

大家也可以加小编微信:tszhihu (备注:Python),拉大家到 Python爱好者社区 微信群,可以跟各位老师互相交流。谢谢。第一时间获取视频更新动态。

也可以关注官网微信公众号:Python爱好者社区

python绘制分形图基础_Python 绘制分形图(曼德勃罗集、分形树叶、科赫曲线、分形龙、谢尔宾斯基三角等)附代码...相关推荐

  1. Python编程:实现谢尔宾斯基三角

    Python编程:实现谢尔宾斯基三角 谢尔宾斯基三角,又称谢尔宾斯基地毯,在计算机图形学中是一种经典的分形图形.本文将使用Python编程实现Sierpinski Triangle(谢尔宾斯基三角), ...

  2. 谢尔宾斯基三角用Python做,你知道吗?

    大家好,我叫王若冲.因为我妈叫我冲姐,所以你们也可以这么叫我.今天是我的第一篇文章,就给大家讲谢尔宾斯基三角的代码吧.如果你既想要试一试,又懒得自己写代码,那么原代码就在下面.*注意,这次我用的软件叫 ...

  3. python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...

    插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...

  4. Python数据结构15:turtle模块制图,画直线,正方形,星星,递归可视化:分形树,谢尔宾斯基三角形

    1. Python中的turtle模块制图 前面已经讲了递归的原理,这里用递归作图来直观的理解递归. 首先了解以下Python中用于作图的内置海龟作图系统turtle module. Python内置 ...

  5. 学习Python中turtle模块的基本用法(4:绘制科赫曲线和谢尔宾斯基三角形)

      科赫曲线和谢尔宾斯基三角形是常见的分形图形(详细介绍见参考文献1),本文使用turtle库绘制这两类图形. 科赫曲线   科赫曲线的详细介绍见参考文献2,其中的绘图思路是"画正三角形,并 ...

  6. Python实验舱谢尔宾斯基三角形绘制教程

    三角形,大家应该再熟悉不过了. 上图是一个由四个小三角形拼成的大三角形,也叫谢尔宾斯基三角形. 谢尔宾斯基三角形还能继续画下去: 2阶(上图是1阶): 3阶: 5阶: 8阶: (小编奉劝一句:不要试图 ...

  7. python与分形0009 - 谢尔宾斯基地毯

    分形介绍 分形是一个悖论. 它惊人的简单,却又无限的复杂. 它很新,却又比尘埃更古老. 分形是什么?它们是从哪里来的?我们为什么要在乎? 20世纪非传统的数学家Benoit Mandelbrot在19 ...

  8. Python实验舱谢尔宾斯基地毯绘制教程

    谢尔宾斯基地毯,和谢尔宾斯基三角形相似,下图就是谢尔宾斯基地毯 一,起始代码 p.width(3) p.speed(10) import turtle n=int(input()) base=int( ...

  9. 混沌与分形(一):谢尔宾斯基三角形与门格海绵

    研究混沌运动,少不了对分形理论的探讨.分形:通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质. 本篇将从 ...

最新文章

  1. 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质!
  2. Spark的RDD依赖关系
  3. 从GC的SuppressFinalize方法带你深刻认识Finalize底层运行机制
  4. NOIP2012复赛 普及组 第一题
  5. (3)FPGA开发语言介绍(第1天)
  6. 【入门】Spring-Boot项目配置Mysql数据库
  7. 贪心【CF1029E】Tree with Small Distances
  8. 一个求整系数多项式的全部有理根的方法
  9. 数据库设计-网上书店系统
  10. 2022年最新京东滑块验证码破解思路(算法过验)
  11. 未开票收入怎么申报?后期补票又怎么申报?
  12. at/atq/atrm
  13. 数据结构之SWUSTOJ954: 单链表的链接
  14. 阿里云物联网平台测评:以温度报警器开发为例
  15. 一个很精致的HelloWorld,你看得懂么?
  16. Udp数据接收和发送代码
  17. 2022年康复医学治疗技术(师)考试题库
  18. 5 个必备有用的开源日志分析工具
  19. 关于inetd和xinetd
  20. mysql网络数据库操作模块_15.mysql数据库操作与Paramiko模块

热门文章

  1. nginx配置别名与前后端根目录名关联
  2. 数据分析之人力资源管理驾驶舱
  3. 七、傻妞对接公众号教程
  4. CodeForces596D Wilbur and Trees
  5. 空气净化器什么牌子好,家用空气净化器哪个牌子好推荐
  6. Linux NAND FLASH驱动程序分析(mini2440)
  7. Mac远程Win桌面官方工具——Microsoft Remote Desktop for mac
  8. PS 模块BAPI新建修改项目、WBS、网络、作业 (一)
  9. stp转obj, stp转stl转换小工具
  10. 如何对PDF文件中的内容进行编辑修改