使用Python实现MIIM方法绘制Julia set

Julia set是一种用简单的表达式生成的复杂分型,一般的Julia set只需要使用的表达式反复迭代便可以得到这样的图像。

虽然这个表达式很简单,但是具体要怎么使用这个表达式来生成Julia set的图像呢,今天来介绍下Python的实现方式。

关于Julia set有很多种实现方式,这篇文章介绍的是反向迭代法(Inverse Iteration Method,简称IIM)的一种改进方案。IIM的原理就是,我们从一个已知存在于Julia set的点中开始反向迭代。正常来说我们是把表达式的结果带入下一个表达式迭代,而反向迭代则是我们不断地解x的值带入下一次迭代。这种方法的好处就是,每一次迭代出来的点都一定是存在于Julia set中的。

IIM方法的性能比传统的BSM高很多,但是存在一些问题,IIM方法对于特定的c值给出的图像质量很差,因为原理限制,它很难迭代到“内部”的点,看起来有些发虚。下图是对比,左边是IIM,右边是质量较高的图像。

而又因为IIM方法每次迭代都会产生两个新的根,这个根生成的过程就好像二叉树一样。导致IIM的迭代次数是呈指数上升的,我们没办法简单通过增加迭代层数来获得更好的图像。如果迭代层数是N,那么实际迭代次数就是2^N。这个代价实在太高了,我们必须找一个别的方法。

这里就引入了我们主题中提到的MIIM,MIIM实际上就是Modified IIM。是对原有的IIM进行改进,解决了图像质量问题的IIM。下面的文章来介绍MIIM的具体实现方法。

 

然后是一个把复数映射到平面上的工具函数。

MIIM算法主体:

MIIM维护一个矩阵,每当有点被迭代到,都会使对应的矩阵项值加1。但是这里我们人为设置了一个上限bailout。某个点被迭代的次数过多,对应矩阵点值超过了bailout,就会放弃从这个点继续迭代。由于bailout的设置,程序最终会因为没有点可以继续迭代停止,因此不需要设置迭代层数。

IIM的问题就在于迭代过程中访问的重复点太多,而MIIM解决了这个问题。提供了一个性能和质量的平衡。

效果:

 

最后 欢迎通过微信公众号联系我们。

微信公众号:320科技工作室。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAE320

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值