• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python编程matplotlib交互绘制Julia集示例解析

python 搞代码 4年前 (2022-01-09) 43次浏览 已收录 0个评论
文章目录[隐藏]

所谓Julia集就是类似下面的美妙的图案

Julia集

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

在上图中,颜色表示该点的发散速度,可以理解为开始发散时迭代的次数。其生成代码也非常简单:

#mbrot.py
import numpy as np
import time
import pyplotlib.pyplot as plt
#生成z坐标,axis为起始位置,nx,ny为x向和y向的格点个数
def genZ(axis,nx,ny):
    x0,x1,y0,y1 = axis
    x = np.linspace(x0,x1,nx)
    y = np.linspace(y0,y1,ny)
    real, img = np.meshgrid(x,y)
    z = real + img*1j
    return z
#获取Julia集,n为迭代次数,m为判定发散点,大于1即可
def getJulia(z,c,n,m=2):
    t = time.time()
    c = np.zeros_like(z)+c
    out = abs(z)
    for i in range(n):
        absz = abs(z)
        z[absz>m]=0		#对开始发散的点置零
        c[absz>m]=0		
        out[absz>m]=i	#记录发散点的发散速度
        z = z*z + c
    print("time:",time.time()-t)
    return out
if __name__ == "__main__":
    axis = np.array([-2,1,-1.5,1.5])
    z0 = genZ(axis,500,500)
    mBrot = getJulia(z0,z0,50)
    plt.imshow(mBrot, cmap=cm.jet, extent=axis)
    plt.gca().set_axis_off()<strong>本文来源gaodai#ma#com搞@@代~&码*网2</strong>
    plt.show()

matplotlib绑定事件

下面希望实现点击Mandelbrot集中的一点,生成相应的Julia集。
在mpl中,事件绑定函数mpl_connect被封装在cavnas类中,调用格式为

canvas.mpl_connect(‘str’, func)

其中func事件函数,字符串为被传入事件函数的事件标识,如下所列,望文生义即可

'button_press_event'
'button_release_event'
'draw_event'
'key_press_event'
'key_release_event'
'motion_notify_event'
'pick_event'
'resize_event'
'scroll_event'
'figure_enter_event'
'figure_leave_event'
'axes_enter_event'
'axes_leave_event'
'close_event'

简单起见,可以先检测一下鼠标点击事件’button_press_event’,对此我们需要定义一个事件函数,并将上面的入口函数稍加修改:

def test(evt):
    print(evt.xdata)	#xdata即x方向的坐标
if __name__ == "__main__":
    axis = np.array([-2,1,-1.5,1.5])
    z0 = genZ(axis,500,500)
    mBrot = getJulia(z0,z0,50)
    fig, ax = plt.subplots()
    fig.canvas.mpl_connect('button_press_event', test)#调用事件函数
    plt.imshow(mBrot, cmap=cm.jet, extent=axis)
    plt.gca().set_axis_off()
    plt.show()	

于是点击imshow()出来的图片,即可返回相应的x坐标。

python mbrot.py
time: 0.47572827339172363
-0.8652597402597402
-0.7840909090909087
-0.18344155844155807
0.23051948051948123
0.8149350649350655

缩放


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python编程matplotlib交互绘制Julia集示例解析
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址