PYNQ框架下的快速分形图形实现

本文转载自: PYNQ开源社区微信公众号

感兴趣者可与 pynq_china@xilinx.com 联系,共同合作拓展项目。

Fractal(分形图形),是由IBM研究室的数学家曼德布洛特(Benoit.Mandelbrot,1924-2010)提出的,其维度并非整数的几何图形,而是在越来越细微的尺度上不断自我重复,是一项研究不规则性的科学。下面是一个最简单的例子,首先画一条线段,然后把它平分成三段,将中间那一段用一个等边三角形的两条边代替。之后,用相同的方法把剩下的每条小线段的中间三分之一部分替换为等边三角形的两条边,得到了16条更小的线段。然后继续对16条线段进行相同的操作,并无限地迭代下去。下图是这个图形前五次迭代的过程,可以看到这样的分辨率下已经不能显示出第五次迭代后图形的所有细节了。

一个有趣的事实是:整个线条的长度每一次都变成了原来的4/3。如果最初的线段长为一个单位,那么第一次操作后总长度变成了4/3,第二次操作后总长增加到16/9,第n次操作后长度为(4/3)^n。毫无疑问,操作无限进行下去,这条曲线将达到无限长。难以置信的是这条无限长的曲线却“始终只有那么大”。

分型图形可以通过简单的递归算法无限递归下去,它的复杂度不随尺度减小而消失。对一个Mandelbrot集的分形图形不断放大,不同尺度下你可以看到完全不同的图形。放大到一定时候,你可以看到更小规模的Mandelbrot集。





通过pynq平台,我们可以实现一个简单交互式绘图工具,用来生成和浏览分型图形,下面来介绍一下这个工具的安装与使用。

快速开始

第一步:准备实验平台

支持的平台有Ultra96, pynq z1/z2。需要提前下载并烧写对应的官方的镜像,并确认能正常从浏览器访问到Jupyter Notebook。

第二步:安装环境依赖(ipycanvas v0.4.7)

在终端中依次运行以下命令

$ sudo pip3 install ipycanvas==0.4.7

$ sudo jupyter labextension install @jupyter-widgets/jupyterlab-manager ipycanvas@0.4.7 --no-build

$ sudo jupyter lab build --minimize=False

$ sudo jupyter labextension install ipycanvas@0.4.7 --minimize=False

Jupyter lab插件的编译时间可能会很长,请耐心等待

第三步:下载notebook文件

进入Jupyter notebook的根目录

$ cd $PYNQ_JUPYTER_NOTEBOOKS

克隆github仓库

$ git clone https://github.com/FredKellerman/pynq-juliabrot

进入仓库目录,切换到master节点

$ cd pynq-juliabrot

$ git checkout origin/master

之后重启

$ sudo reboot

第四步:Enjoy!

在浏览器中输入网址http:///lab (替换为开发板的ip),浏览目录进入pynq-juliabrot文件夹,找到juliabrot-zoom.ipynb并打开。

依次运行代码块,当运行完jui.draw_roaming_ui()这段代码之后,会出现一个交互式的窗口,在窗口中依次点击可将分形图放大到特定位置。继续运行之后的notebook可通过简单地修改参数来创建自己的分形图型。

参考资料:

https://en.wikipedia.org/wiki/Fractal

https://github.com/FredKellerman/pynq-juliabrot

最新文章

最新文章