Julia集

此Julia非彼Julia,指的是对于某复数ccc,使得迭代式f(z)=z2+cf(z)=z^2+cf(z)=z2+c收敛的复数zzz的集合。例如,当c=0c=0c=0时,那么其收敛区间为z2<1z^2<1z2<1的单位圆,对应的ccc的Julia集便是cos⁡θ+isin⁡θ\cos\theta+i\sin\thetacosθ+isinθ。

Mandelbrot集

特别地,当c=zc=zc=z的初始值时,符合收敛条件的zzz的便构成大名鼎鼎的Mandelbrot集

在上图中,颜色表示该点的发散速度,可以理解为开始发散时迭代的次数。其生成代码也非常简单,唯一需要注意的是,由于使用了大量的矩阵运算,故使用了cupy,如果电脑没装cuda,只需将所有的cp改为np即可。

# 这些代码会在后面的程序中反复调用,不再说明
import numpy as np
import time
import matplotlib.pyplot as plt
import cupy as cp#生成z坐标 x0,y0 为起始点, nx,ny为点数, delta为点距
def genZ(x0, y0, nx, ny, delta):real, img = cp.indices([nx,ny])*deltareal += x0img += y0return real.T+img.T*1j#获取Julia集,n为迭代次数,m为判定发散点,大于1即可
def getJulia(z,c,n,m=2):t = time.time()z,out = z*1, cp.abs(z)c = cp.zeros_like(z)+cfor i in range(n):absz = cp.abs(z)z[absz>m]=0      #对开始发散的点置零c[absz>m]=0       out[absz>m]=i   #记录发散点的发散速度z = z*z + cprint("time:",time.time()-t)return outz1 = genZ(-2,-1.5,1000,1000,0.003)
mBrot = getJulia(z1,z1,50)
plt.imshow(mBrot.get(), cmap=plt.cm.jet)
plt.show()

如果对其生成过程感兴趣,那么可以观察一下随着迭代次数的增加,图像的变化情况

代码如下。

from matplotlib import animationfig = plt.figure()
fig.subplots_adjust(top=1, bottom=0, left=0, right=1)
ax = plt.subplot()def getJulias(z,c,n,m=2):z,out = z*1, cp.abs(z)c = cp.zeros_like(z)+cJ = []for i in range(n):z = z*z + cabsz = cp.abs(z)z[absz>m]=0      #对开始发散的点置零c[absz>m]=0       out[absz>m]=i   #记录发散点的发散速度im = ax.imshow(out.get(),cmap=plt.cm.jet, animated=True)ax.set_axis_off()J.append([im])return JN = 75     #迭代次数
z1 = genZ(-2,-1.5,1000,1000,0.003)
J = getJulias(z1,z1,N)ani = animation.ArtistAnimation(fig, J, interval=50, blit=True,repeat_delay=1000)
plt.show()
ani.save('julias.gif',writer='imagemagick')

无限缩放

Mandelbrot集的分形特征意味着我们所生成的图片可以无限放大,但是受到栅格化尺寸的影响,手动的放大并不会更改其真实尺寸,

为了照顾观感,将缩放中心作为图像的中心,所以对genZ函数进行修改。如果选取(-0.75,-0.2)作为缩放中心,则其变化如下

代码为

from matplotlib import animation# 生成z坐标 xy=np.array([xc,yc]) 为起始点,
# nxy=np.array([nx,ny])为点数, delta为点距
def genZbyCenter(xy,nxy,delta):x0, y0 = xy-np.array(nxy)*delta/2return genZ(x0,y0,*nxy,delta)mBrots = []
xy = [-0.75,-0.2]
nxy = [1000,1000]
delta0 = 0.003  #初始宽度fig = plt.figure()
fig.subplots_adjust(top=1, bottom=0, left=0, right=1)
ax = plt.subplot()for n in range(50):z1 = genZbyCenter(xy,nxy,1.1**(-n)*delta0)out = getJulia(z1,z1,40)im = ax.imshow(out.get(),cmap=plt.cm.jet, animated=True)ax.set_axis_off()mBrots.append([im])ani = animation.ArtistAnimation(fig, mBrots, interval=50, blit=True)
plt.show()
ani.save('zoom.gif',writer='imagemagick')

Julia集

如果更改c的值,那么就能得到一个变化着的Julia集,例如,下面选取一条直线

y=xy=xy=x

上面的Julia集,效果如图所示

代码为

z1 = genZ(-2,-1.5,1000,1000,0.003)fig = plt.figure()
fig.subplots_adjust(top=1, bottom=0, left=0, right=1)
ax = plt.subplot()mBrots = []
for x in np.arange(0.5,1,0.01):c = x + x*1jout = getJulia(z1,c,40)im = ax.imshow(out.get(),cmap=plt.cm.jet, animated=True)ax.set_axis_off()mBrots.append([im])ani = animation.ArtistAnimation(fig, mBrots, interval=50)
plt.show()
ani.save('julia.gif',writer='imagemagick')

python绘制动态Julia集,超炫酷相关推荐

  1. 前端Vue中实现超炫酷动态背景(全屏背景+自定义banner+登录/注册页)

    一.文章引导 #mermaid-svg-9sKRaMRBkdCcbAh2 {font-family:"trebuchet ms",verdana,arial,sans-serif; ...

  2. 最新超炫酷的动态引导页官网HTML源码

    正文: 最新超炫酷的动态引导页官网HTML源码,背景是动态的,非常炫酷,有兴趣的自行去体验吧,其它就没什么好介绍的了. 程序: wwxegu.lanzoui.com/iOt9B0h05iof 图片:

  3. js绘制超炫酷3D化学元素周期表

    化学元素周期表(Periodic table of elements)是根据原子量从小至大排序的化学元素列表.列表大体呈长方形,某些元素周期中留有空格,使特性相近的元素归在同一族中,如碱金属元素.碱土 ...

  4. python绘制动态图-数据可视化

    参考 知乎:把数据摇起来 知乎:可视化也能秀,教你用Python制作GIF动图 40行Python制作超炫酷动态排序图,有了它高逼格PPT再也不愁! 卧槽,还能这么玩!用Python生成动态PPT 实 ...

  5. html炫酷在线,程序猿必备的10款超炫酷HTML5 Canvas插件

    1.超炫酷HTML5 Canvas 3D旋转地球动画 这是一款基于HTML5 Canvas的3D地球模拟动画,动画以太空作为背景,地球在太空中旋转,同时我们也可以拖拽鼠标来从不同的角度观察地球.另外我 ...

  6. php仿苹果,关于8个超炫酷仿苹果应用的HTML5动画的图文详解

    苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...

  7. html5+css3满天星星音乐背景动画特效(超炫酷)

    css3满天星星音乐背景动画特效 css3属性绘制唯美的满天星星和audio MP3音乐结合背景动画特效. 作品介绍 1.网页作品简介方面 :css3属性绘制唯美的满天星星和audio MP3音乐结合 ...

  8. ios8.0 html样式,8个超炫酷仿苹果应用的HTML5动画

    苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...

  9. 纯CSS3实现超炫酷的萤火虫动画

    纯CSS3实现超炫酷的萤火虫动画 120 人浏览 发表回复 今天要为大家带来一款很有意思的纯CSS3动画,这次我们要利用CSS3的一些动画属性来绘制一只闪闪发光的萤火虫,和之前分享的纯CSS3蚱蜢与纯 ...

最新文章

  1. 【Pandas库】(2) Series的基本操作方法
  2. latex不能识别eps图片
  3. php try 中 抛出异常处理,php中try catch捕获异常实例详解
  4. Java 并发——多线程基础
  5. TransactionProducer(事务消息)
  6. Katu Puzzle(POJ-3678)
  7. php自动加载原理,php中的自动加载类机制原理
  8. 2021-03-16 转自知乎专栏 https://zhuanlan.zhihu.com/p/24482664
  9. RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践
  10. oracle 保留池,oracle的内存结构之--查看内存信息+保留池和循环池(摘自文平书)...
  11. Filebeat log @timestamp处理
  12. 数学基础——数理逻辑
  13. hp微型计算机网线怎么安装,宽带师傅教你怎么安装网线插座 看完自己都会了!...
  14. 聊聊志愿填报那点事儿
  15. DBSCAN聚类——Python实现
  16. 关于numeric_limits
  17. 开发工具---Eclipse 教程Ⅰ
  18. 地图标绘软件_如何制作专题地图(设计、规划、测绘制作图斑)标绘使用详解...
  19. getsockopt套接口选项
  20. 京东网京东快报超级链接验证

热门文章

  1. 51单片机检测温湿度并且上传到阿里云
  2. switch更新找不到服务器,任天堂Switch最新系统更新 修复数字商店bug
  3. CPU巨型机,大型机,中型机,小型机和微型计算机中央处理器都称为CPU、MPU(微型化的CPU,在微机中CPU=MPU)、MCU和SOC
  4. 乔治亚理工学院计算机专业,佐治亚理工学院计算机专业怎么样?
  5. Ubuntu 16G内存在android系统 10/11/12/13编译 framework时候经常oom内存不足,电脑卡死解决办法stubs-docs-non-updatable metalava
  6. P2757 [国家集训队]等差子序列
  7. 死理性派恋爱法:拒绝掉前面37%的人
  8. 抓取中国天气网当前时段所有城市的天气数据(python+xpath)
  9. 数据库的基本操作习题
  10. 6、Shiro之自定义realm