如何用python画人像_如何用Python画曼德勃罗集

本文介绍了如何使用Python绘制曼德勃罗集,并提供了详细的步骤和代码实现。通过for循环计算数列,判断复平面上点的性质,最终形成图像。文章还提及了提高图像精度的方法,并表达了期待代码优化的愿望。
摘要由CSDN通过智能技术生成

先上图9ed1267039b729d8e5036da64fa75549.png好看的曼德勃罗集

错了错了是这个f26a6eb7a53e721bf91bd0f485730732.png特别好看的曼德勃罗集

当然你需要下载Python(https://www.python.org)

和Visual Studio 2019(https://visualstudio.microsoft.com/zh-hans/downloads/)544e8de9ed80ba11025842599559015f.png

记得在Visual Studio中加入Python的环境fd395b3677a99ce34ce1c3f0e433b4a0.png

让我们开始吧8b22ab26ef493287a87a82da4f4b89c6.png

一、什么是曼德勃罗集

这里就不对曼德勃罗集的历史、发现之类的内容进行说明了,想知道的朋友自行搜索。

我们先构造一个数列:a33d27a39316524b134bf29a4960dfba.png

比如我们取c=1

于是

z₁=z₀²+c=1

z₂=z₁²+c=2

z₃=z₂²+c=5

z₄=z₃²+c=26

很明显,这个数列最后会变成无穷大(blows up to infinity英文可能跟好理解)

注:复平面上到原点距离大于2的点(即复数c)套入数列后,数列最后一定会变成无穷大

又比如我们取c=i(i²=-1)

于是

z₁=z₀²+c=i

z₂=z₁²+c=-1+i

z₃=z₂²+c=-i

z₄=z₃²+c=-1+i

很明显,这个数列最后不会变成无穷大,而是再-1+i与-i之间反复横跳

于是我们就能把复平面上的点(即复数c)分成两类套入数列后,数列最后会变成无穷大

套入数列后,数列最后不会变成无穷大

如果满足第二种,我们就把这个点涂成黑色

注:彩色图片中的颜色是根据数列变成无穷大的速度涂色的8b22ab26ef493287a87a82da4f4b89c6.png

二、用Python实现

大致思路是这样的:用for循环计算数列,看看最后的结果到原点的距离是否大于2

用if判断:如果大于2,在这个位置打上一个”空格”;如果小于2,在这个位置打上一个“字符”

用for循环检索x∈[-2,2],y∈[-2,2]的点,重复1、2步

首先,很容易写出计算数列的代码:

为了减少计算量,当z离原点的距离大于2时,停止这个循环

加入打字的内容,

我的思路是,将每一次判断大于2还是小于2的结果加入一个变量text中

最后,我们用两个for循环套在外面,让它可以检索x∈[-2,2],y∈[-2,2]的点,注意,我们要先沿实轴正方向检索,再演虚轴“负方向”检索。

但这只能输出这样的图:83e96107032e83aae96fdafdb2bba672.png

不行,我们要更大的。问题出在哪里呢?

注意,range函数只能让i从一个整数,跳到另一个整数。为了使检索的精度变高,我们可以在写for循环时,给i和j的下界与上界都乘一个整数p,在最后用到变量的时候,除以p,增加它的检索精度。

58c9f3fe395d69ddf285ad62db4c9f15.png按下按钮,静静等待

6c1f4ba5c3df1329bafff1e0122e4395.pngtada~

本人Python学的也不是很好,希望有大佬能对代码修改或优化

图片来源:

[1]彩色曼德勃罗集:http://f8r.cn/uvxbtq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值