先睹为快_Mandelbrot集

article/2025/9/15 18:01:12

本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

先睹为快_Mandelbrot集

简易版本的Mandelbrot集

"""
Draw mandelbrot set with matplotlib.
Matrix generated by Pure Python code.
chenbo@cqu.edu.cn,   Dec 2018.Usage:key-up, key-down:  switch color map
"""from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as npdef getEscapeTime(c):"计算参数c的逃逸时间,该逃逸速度将用作点的颜色"z = 0for i in range(100):if abs(z) > 2:return iz = z*z + creturn idef computeMandelbrot(xCenter,yCenter,semiWidth,N):xFrom,xTo,yFrom,yTo = xCenter-semiWidth,xCenter+semiWidth,\yCenter-semiWidth,yCenter+semiWidthy,x = np.ogrid[yFrom:yTo:N*1j,xFrom:xTo:N*1j]c = x + y*1jprint("c.shape:",c.shape,"x.shape:",x.shape,"y.shape:",y.shape)return np.frompyfunc(getEscapeTime,1,1)(c).astype(np.float)def drawMandelbrot(ax,xCenter,yCenter,semiWidth,N,cmap):"(xCenter,yCenter)-中心点,semiWidth-矩形半宽,N*N像素."ax.set_axis_off()ds = computeMandelbrot(xCenter,yCenter,semiWidth,N)ax.imshow(ds,cmap=cmap)def refresh():c = cm.get_cmap(para.cmaps[para.idxColorMap%len(para.cmaps)])drawMandelbrot(para.ax0, para.x, para.y,semiWidth=0.2, N=600,cmap=c)drawMandelbrot(para.ax1, para.x, para.y,semiWidth=0.2 ** 3, N=600,cmap=c)para.fig.canvas.draw()def on_key_release(event):if event.key == 'up':para.idxColorMap+=1elif event.key == 'down':para.idxColorMap-=1else:returnrefresh()class Para:passpara = Para()
para.x, para.y = 0.27322626, 0.595153338
para.idxColorMap = 0
para.cmaps = ['rainbow', 'jet', 'nipy_spectral', 'gist_ncar','flag','prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern','gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg','gist_rainbow']
para.fig = plt.figure(figsize=(12,6),dpi=100)
para.fig.canvas.mpl_connect('key_release_event',on_key_release)
plt.subplots_adjust(0,0,1,1,0.0,0)
para.ax0 = plt.subplot(121)
para.ax1 = plt.subplot(122)
refresh()
plt.show()

在这里插入图片描述

交互版本的Mandelbrot集

"""
Draw mandelbrot set with matplotlib.
Escape time computed by Cython.
chenbo@cqu.edu.cn,   Dec 2018.Usage:left-click mouse: Zoom inright-click mouse: Zoom outkey escape:  Resetkey up,key down: Switch color map.
"""from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as np
from MandelbrotComp import getEscapeTimedef computeMandelbrot(xCenter,yCenter,semiWidth,N):xFrom,xTo,yFrom,yTo = xCenter-semiWidth,xCenter+semiWidth,\yCenter-semiWidth,yCenter+semiWidthy,x = np.ogrid[yFrom:yTo:N*1j,xFrom:xTo:N*1j]c = x + y*1jprint("c.shape:",c.shape,"x.shape:",x.shape,"y.shape:",y.shape)return np.frompyfunc(getEscapeTime,1,1)(c).astype(np.float)def drawMandelbrot(ax,xCenter,yCenter,semiWidth,N,cmap):"(xCenter,yCenter)-中心点,semiWidth-矩形半宽,N*N像素."ax.set_axis_off()ds = computeMandelbrot(xCenter,yCenter,semiWidth,N)ax.imshow(ds,cmap=cmap)def refresh():print("x,y =",para.x,para.y,"semiWidth =", para.semiWidth)c = cm.get_cmap(para.cmaps[para.idxColorMap%len(para.cmaps)])drawMandelbrot(para.ax, para.x, para.y,para.semiWidth, N=700,cmap=c)para.fig.canvas.draw()def on_key_release(event):if event.key == 'up':para.idxColorMap+=1elif event.key == 'down':para.idxColorMap-=1elif event.key == 'escape':para.x, para.y = -0.5, 0.0para.semiWidth = 1.5else:returnrefresh()def on_button_release(event):para.x = (para.x - para.semiWidth) + \2*para.semiWidth*event.xdata/para.figWidthpara.y = (para.y - para.semiWidth) + \2*para.semiWidth*event.ydata/para.figHeightif event.button == 1:para.semiWidth /= 3.0elif event.button == 3:para.semiWidth *= 3.0refresh()class Para:passpara = Para()
para.x, para.y = -0.5, 0.0
para.semiWidth = 1.5
para.idxColorMap = 0
para.cmaps = ['rainbow', 'jet', 'nipy_spectral', 'gist_ncar','flag','prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern','gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg','gist_rainbow']
para.fig = plt.figure(figsize=(7,7),dpi=100)
para.figWidth,para.figHeight = 700,700
para.fig.canvas.mpl_connect('key_release_event',on_key_release)
para.fig.canvas.mpl_connect('button_release_event',on_button_release)
plt.subplots_adjust(0,0,1,1,0.0,0)
para.ax = plt.subplot(111)
refresh()
plt.show()

这个需要Cython的支持,使用Cython语言编写一个核心函数,然后将其编译成Python模块(MandelbrotComp )来调用。

def getEscapeTime(complex c):"计算参数c的逃逸时间,该逃逸速度将用作点的颜色"cdef complex z = 0cdef int ifor i in range(100):if z.real * z.real + z.imag*z.imag > 4:return iz = z*z + creturn i

上面这个代码跟普通的Python不一样,里面的变量是有类型声明的,Cython可以将其编译成.c文件,然后再编译成Python模块。

为了帮助更多的年轻朋友们学好编程,作者在B站上开了两门免费的网课,一门零基础讲Python,一门零基础C和C++一起学,拿走不谢!

简洁的C及C++
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造
Python编程基础及应用
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造

如果你觉得纸质书看起来更顺手,目前Python有两本,C和C++在出版过程中。

Python编程基础及应用

Python编程基础及应用实验教程
在这里插入图片描述


http://chatgpt.dhexx.cn/article/8X8eSwS7.shtml

相关文章

用Python画Mandelbrot集

Mandelbrot Set(曼德勃罗集)可能是分形 图形中最有名的图形,关于它的介绍我就不多写了,有兴趣的可以参考这个链接 。下面是关于如何使用Python来画这个图形的尝试。 由于Python标准库中还没有对图形处理的支持,在此我使…

Mandelbrot Set (曼德布洛特集) VC 源代码

关于 Mandelbrot Set (曼德布洛特集) 的介绍什么的我就不多说了&#xff0c;网上一大堆。唯独清晰的代码不好找&#xff0c;所以我就贴代码吧&#xff1a; // 需要安装 EasyX 库&#xff0c;Visual C 6.0 下编译通过 #include <graphics.h> #include <conio.h> / /…

Bellman-ford算法详解

什么是Bellman-ford算法 贝尔曼-福特算法&#xff08;Bellman-Ford&#xff09;是由理查德贝尔曼&#xff08;Richard Bellman&#xff09;和莱斯特福特创立的&#xff0c;求解单源最短路径问题的一种算法。其优于Dijkstra的方面是边的权值可以为负数、实现简单&#xff0c;缺…

分形(Fractal)及分形维数(Fractal dimension)

文章目录 1. 分形介绍2. 分形的定义3. 分形维数介绍4. 历史5. 缩放的作用&#xff08;Role of scaling&#xff09;6. D 不是唯一描述符7. 分形表面结构8. 例子8.8 Hausdorff dimension8.8.1 直观概念8.8.2 正式定义8.8.2.1 Hausdorff dimension8.8.2.2 Hausdorff content 8.8.…

Mandelbrot集的最新变化形态一览——MandelBox,Mandelbulb,Burning Ship,NebulaBrot

二维Mandelbrot集——Burning Ship 采用以下迭代公式 (x4-6*x2*y2y4, 4*|x|3*|y|-4*|y|3*|x|) 看不懂的&#xff0c;可以去学习深造了。。。 Mandelbulb 这个3D的Mandelbrot集采用的是以下公式&#xff0c;这应该算是超复数的一种&#xff0c;人称“triplex”&#xff0c;三…

Mandelbrot集Julia集分形的MATLAB实现(分形艺术)

Mandelbrot集Julia集分形的MATLAB实现&#xff08;分形艺术&#xff09; 1 简单Julia集的实现1.1 如何实现更光滑的展示效果&#xff1f; 2 Mandelbrot集的实现3 永恒的细节 本文首发于 matlab爱好者 微信公众号&#xff0c;欢迎关注。 惯例声明&#xff1a;本人没有相关的工程…

神奇的分形艺术: Mandelbrot集和Julia集

前言 这段时间看了一个关于维度的视频介绍&#xff0c;叹于其惊艳的多维几何体和分形的视觉动画效果。其实关于分形&#xff0c;已经有很成熟的分形软件和应用场景&#xff0c;可以参看目前流行的分形软件一览&#xff0c;不过没有及时更新&#xff0c;有些链接已经进不了&…

MATLAB | 分形的艺术——(Mandelbrot)曼德勃罗特集合

PART.0 Mandelbrot 介绍 “无规则的碎片” “魔鬼的聚合物” “上帝的指纹” Mandelbrot集合有着多种称谓&#xff0c;那么什么是曼德勃罗特集&#xff1f;Mandelbrot集合可以用复二次多项式&#xff1a; f c ( z ) z 2 c f_c(z)z^2c fc​(z)z2c 来表示&#xff0c;其中c是…

神奇的Python-实现曼德布洛特(Mandelbrot)集合(一行代码,matplotlib numpy,tensorflow)分别实现

神奇的Python-实现曼德布洛特(Mandelbrot)集合(一行代码&#xff0c;matplotlib numpy&#xff0c;tensorflow)分别实现 Mandelbrot图实际上是由Mandelbrot集合构成的图像。 Mandelbrot集合的定义如下&#xff1a; z n 1 z n 2 c z_{n1}z^2_nc zn1​zn2​c 其中&#xff…

曼德勃罗集(Mandelbrot Set)

先来膜拜一下大神&#xff01; 曼德勃罗(Benoit B. Mandelbrot)&#xff0c;数学家、经济学家&#xff0c;分形理论的创始人。1924年生于波兰华沙&#xff1b;1936年随全家移居法国巴黎&#xff0c;在那里经历了动荡的二战时期&#xff1b;1948年在帕萨迪纳获得航空硕士学位&am…

用matlab画Mandelbrot(曼德布罗特)图

Mandelbrot图实际上是由Mandelbrot集合构成的图像。 Mandelbrot集合的定义如下&#xff1a; zn1z2nc 其中&#xff0c;c是一个复数。加入给定一个复数 z0 &#xff0c;比如 z00 &#xff0c;那么这个递推式会生成一个序列&#xff1a; [z0,z1,z2,z3,...] 。如果这个序列收敛…

Mandelbrot 并行实现

最近要交并行计算的作业了,这周终于把作业写了个大概,这期间感觉学了不少东西,总结一下。 Mandelbrot Set 背景 前几天逛维基百科的时候看到了如下的消息:著名数学家、分形之父Benot B. Mandelbrot(中文名本华曼德博)美国时间10月15日辞世,享年85岁。 “1979年,在哈…

Mastering Qt 5 学习笔记-Mandelbrot

是一个 Mandelbrot 分形的多线程计算。 用户将看到分形&#xff0c;并能够在该窗口中平移和缩放。Mandelbrot 分形是一个处理复数 (a bi) 的数值集&#xff0c;该图像中的每个黑色像素都趋向于发散到一个无限值&#xff0c;&#xff0c;而绿色像素则有界于一个有限值。绿色像素…

Mandelbrot集合及其渲染

什么是Mandelbrot集合&#xff1f; Mandelbrot集合是在复数平面上组成分形的点的集合&#xff0c;它正是以数学家Mandelbrot命名。 Mandelbrot集合可以用复二次多项式\[ f_c(z)z^2c \] 来定义 其中c是一个复数。对于每一个c&#xff0c;从\(z 0\),开始对\(f_c(z)\)进行迭代。 …

分形之父 Mandelbrot

著名数学家&#xff0c;被誉为分形之父的Mandelbrot先生&#xff0c;美国时间10月15日在马萨诸塞州剑桥辞世&#xff0c;享年85岁。他用“美丽”改变了我们的世界观&#xff0c;他被认为是20世纪后半叶少有的影响深远而且广泛的科学伟人之一&#xff0c;1993年他获得沃尔夫物理…

Ettercap系列 II:基于命令行界面(结合driftnet截获目标机器正在浏览的图片)

相信跟着这个系列走&#xff0c;一直看到这篇文章的读者已经了解了基于图形化Ettercap的操作&#xff0c;并对Arp欺骗和Ettercap相关的术语有所了解。本篇就如何在命令行界面下操作ettercap&#xff0c;以实现与图形化界面相同的效果展开讨论。可能你会不解&#xff1a;既然我已…

无线局域网的嗅探攻击和防御——ettercap+driftnet

&#xfeff;&#xfeff; 无线局域网的嗅探攻击和防御 -----ettercapdriftnet 1 实验要求和目的 ●了解局域网转发数据的规则与协议 ●了解抓包软件的原理与操作流程 ●对网络中数据传输的协议有更深层次的认识 2 实验原理和背景知识 2.1 抓包软件与分析软件 本次嗅探试验所…

python实现图片嗅探工具——自编driftnet

python实现图片嗅探工具——自编driftnet 前言一、数据包嗅探二、图片捕获三、图片显示及主函数写在最后 前言 想必尝试过中间人攻击&#xff08;MITM)的小伙伴&#xff0c;大概率是知道driftnet的。这是一款简单使用的图片捕获工具&#xff0c;可以很方便的从网络数据包中抓取…

kali中 arpspoof、driftnet、流量转发的图片抓取

1、开启内核转发模式&#xff08;echo 1为转发 echo 0为拦截&#xff09; echo 1 /proc/sys/net/ipv4/ip_forward 配置完成使用命令查看cat /proc/sys/net/ipv4/ip_forward 2、使用 Arpspoof 开始攻击 命令:Arpspoof -i (自己网卡) -t 目标IP 网关 3、打开另一个终端 查看dri…

ARP欺骗攻击(流量图片)——dsniff与driftnet使用

ARP欺骗攻击&#xff08;流量&图片&#xff09; 原理&#xff1a; 首先我们![请添加图片描述](https://img-blog.csdnimg.cn/7de7923387224bcda1ea4be958032ae9.png 要明白何为ARP&#xff08;地址解析协议&#xff09;&#xff1a;是根据 IP地址 获取 物理地址 的一个 TC…