目录

1. Koch曲线

瑞典数学家Helge von Koch,在1904年发表的“从初等几何构造的一条没有切线的连续曲线”的论文中提出Korch曲线。它的描述如下:指定一条线段的长度\(l\)(可以理解为第0次迭代)

将这条线段三等分,并以中间的线段为底边构造一个等边三角形,然后去掉底边

对2中生成的曲线的每一条边重复2的操作(每操作一次称为一次迭代)

最终得到的集合图形长度为:$$L=l*(\frac{4}{3})^{N}$$,其中的N指的是迭代次数。

1.2 绘制方法:如果N=0,直接画出L长的直线即可

如果N=1(第一次迭代),画出长度为L/3的线段;画笔向左转60度再画长度为L/3长的线段;画笔向右转120度画长度为L/3长的线段;画笔再向左转60度画出长度为L/3的线段

如果n>1,第n次迭代相当于:n-1次迭代;画笔左转60度;n-1次迭代;画笔右转120度;n-1次迭代;画笔左转60度;n-1次迭代。

1.3 Python代码实现# -*- coding: utf-8 -*-

import turtle

Division = 3.0

DirectionAangle = [('left',60),('right',120),('left',60)]

def call(name):

if name == 'left':

return turtle.left

else:

return turtle.right

def koch(n, length):

if n==0:

turtle.forward(length)

else:

for DA in DirectionAangle:

koch(n-1,length/Division)

call(DA[0])(DA[1])

koch(n-1,length/Division)

koch(n=2, length=100)

turtle.done()

1.4 绘制的图形

下面分别是n=3, length=300和n=4, length=400生成的Koch曲线

2. Julia集

2.1 绘制方法

在上一篇博文中提到过,点击前往设定初值 p,q, 最大的迭代次数 N, 图形的大小 a,b, 及使用的颜色数 K.这里需要注意的是c的模总是小于2。可以证明当c的模大于2时,进行迭代必将发散到无穷。

设定区域的界值 \( M\ge max(2,\sqrt{p^2+q^2}) \)

将区域\(R=[-M,M]\times[-M,M]\)分成\(a\times b\)的网格,分别以每个网格点为初值(\(x_0,y_0\))。利用上面替换之后的公式做迭代。如果对\(n \le N\)所有的都有\({x_n}^2+{y_n}^2\le M^2 \),则将象素\((i, j)\)置为这一种颜色。如果从某一步 n 开始\({x_n}^2+{y_n}^2\ge M^2 \),则将象素 \((i, j)\)置为不同颜色。

2.2 Python代码实现# -*- coding: utf-8 -*-

import matplotlib.pyplot as plot

import numpy as np

p=0.45 #初始值c的实部

q=-0.1428 #初始值c的虚部

N=800 #最大迭代次数

M=100 #迭代区域的界值

a=3.0 #绘制图的横轴大小

b=3.0 #绘制图的纵轴大小

step=0.005 #绘制点的步长

def iterate(z,N,M):

z=z*z+c

for i in xrange(N):

if abs(z)>M:

return i

z=z*z+c

return N

c=p+q*1j

i=np.arange(-a/2.0,a/2.0,step)

j=np.arange(b/2.0,-b/2.0,-step)

I,J=np.meshgrid(i, j)

ufunc=np.frompyfunc(iterate,3,1)

Z=ufunc(I+1j*J,N,M).astype(np.float)

plot.imshow(Z,extent=(-a/2.0,a/2.0,-b/2,b/2.0))

cb = plot.colorbar(orientation='vertical',shrink=1)

cb.set_label('iteration counts')

plot.show()

2.3 绘制的图形

参数:p=0.285 q=0.01 N=200 M=100 a=2.0 b=2.0 step=0.005 (左图)

参数:p=0.45 q=-0.1428 N=200 M=100 a=2.0 b=2.0 step=0.005 (右图)

还有其他的初始c值可以绘制出十分漂亮的图案,例如:

c = -0.70176+-0.3842j c = -0.835+-0.2321j c = -0.8+0.156j c = 0.285

3. Mandelbrot集

数学定义: $$f_c(z) = z^2+c$$

Mandelbrot集是\(f_c(z)\)在z=0,关于复数c=x+yi的函数迭代不发散序列集合。

绘制Mandelbrot集最简单的方法是使用逃逸时间进行绘制。逃逸时间指的是,在指定范围M进行有限次数N迭代,而不超出M区域的次数。使用不同的颜色绘制不同的迭代次数。设置迭代的最多次数,N

设置初始化\(z_0\)的值,

设置逃逸半径R的值,通常为2

3.1 绘制方法

3.2 Python实现# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plot

x0=0 #初始值z0的x0

y0=0 #初始值z0的y0

zoom=1.0 #放大倍率

N=100 #最大迭代次数

R=2 #迭代半径

a=4.0 #绘制图的横轴大小

b=3.0 #绘制图的纵轴大小

step=0.005 #绘制点的步长

def iterate(c,N,R):

z=c

for i in xrange(N):

if abs(z)>R:

return i

z = z*z+c

return N

x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step)

y=np.arange(b/(2.0*zoom)+y0,-b/(2.0*zoom)+y0,-step)

cx,cy=np.meshgrid(x, y)

c = cx + cy*1j

ufunc=np.frompyfunc(iterate,3,1)

Z=ufunc(c,N,R).astype(np.float)

plot.imshow(Z,extent=(-a/2.0,a/2.0,-b/2,b/2.0))

cb = plot.colorbar(orientation='vertical',shrink=1)

cb.set_label('iteration counts')

plot.show()

3.3 绘制的图形

图中是使用参数:x0=0 y0=0 zoom=1.0 N=100 R=2 a=4.0 b=3.0 step=0.005。生成的图像。不同的是,它们依次使用的是二次、三次幂的迭代。

最后,还可以使用ImageMagick工具,将生成的图像制作成一个动态GIF。convert *.png out.gif

python分形几何_使用 Python 绘制分形: Koch 曲线、Julia 集、Mandelbrot 集相关推荐

  1. python分形几何_分形造型(一)

    一.引言 欧氏几何方法 以规则几何图形为研究对象,物体形状由方程来描述 欧氏几何主要描述工具 点,直线,平滑的曲线.平面 欧氏几何不能模拟自然景物 山脉.云.树.草.火.雾.波浪等 为解决复杂图形生成 ...

  2. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  3. 数学之美之分形——C++及OpenCV实现Julia集和Mandelbrot集绘制

    搞了一天,终于全部搞定了,久久惊叹于分形的美而不能自拔-- 先来简单介绍下Julia集和Mandelbrot集:(来自这里) 曼德勃罗特(Mandelbrot)集是人类有史以来做出的最奇异,最瑰丽的几 ...

  4. 分形之Julia集和Mandelbrot集及浅谈分形理论的应用

    首先要show一把这俩个集合的图片 [img]http://upload.wikimedia.org/wikipedia/commons/a/a4/Mandelbrot_sequence_new.gi ...

  5. Python小例子——利用递归绘制分形树

    # -*- coding: utf-8 -*- """作者:宇轩亚40功能:利用递归绘制分形树 """ import turtledef d ...

  6. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  7. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  8. 网络安全用python吗_使用Python进行网络安全渗透——密码攻击测试器

    相关文章: 本篇将会涉及: HTTP 基本认证 对HTTP Basic认证进行密码暴力攻击测试 什么是HTTP 基本认证 HTTP基本认证(HTTP Basic Authentication)是HTT ...

  9. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

最新文章

  1. 卫星定位导航行业的产业链
  2. oralce创建用户
  3. 神策数据:游戏买量与长线运营的数据宝典
  4. 图书推荐(持续更新)
  5. C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
  6. 我的docker随笔12:docker源码编译
  7. OPencv_边缘检测算法
  8. select框多级联动
  9. 网站安全之设置HttpOnly的方法
  10. Python: 组合管理与蒙特卡洛方法实现
  11. 搜索,推荐,广告系统架构及算法技术资料大合集吐血整理——2020年终分享
  12. 通过 百度网盘 分享文件
  13. 计算机与打印机脱机后怎么共享,电脑重启后共享打印机脱机的解决方法
  14. windows各版本序列号集合
  15. app服务器指向dat文件,appdat-系统爱好者
  16. whistle-安卓手机配置代理
  17. MaxEnt运行错误
  18. ModuleNotFoundError: No module named ‘pandas.tseries‘
  19. 微信小程序云数据库实现注册
  20. PAT - 1036 跟奥巴马一起编程

热门文章

  1. 8、使用SELECTI...INTO OUTFILE导出表数据
  2. 106. 动态中位数【经典 / 对顶堆】
  3. Codeforces Round #481 (Div. 3)【完结】
  4. 用vector写结构体
  5. C语言在不引入第三变量下交换俩数
  6. C语言之字符串处理函数
  7. CopyOnWrite容器
  8. MySQL带ALL关键字的子查询
  9. mysql2003错误如何解决_如何安装最新版redis6错误解决以及配置开机启动等
  10. noteexpress 笔记导出_【在库言库】2019年第7期 科研工具——NoteExpress文献管理软件...