zoukankan      html  css  js  c++  java
  • 混沌图像---埃农的猫头鹰

          法国尼斯天文台埃农(M.Henon)教授在研究天体力学过程中提出了许多二维映射,通常说的是埃农映射H :

    x_(n+1)=1-ax^2_n+y_n

    y_(n+1)=bx_n

          其中a和b都是参数,当|b|<1时,H是耗散的,当| b|=1时,H是保守的。这个映射是埃农1976年提出来的,研究的人比较多,几乎每本混沌书都要提到,其中北京大学力学系黄永念教授用纯代数方法研究埃农映射,很有特色。
    然后埃农在1969年还提出来的一个保守映射,其形式为G :

    x_(n+1)=x_ncost-y_nsint+x^2_nsin t,

    y_(n+1)=x_nsint+y_ncost-x^2_ncos t,

         天文学家,这可是逼格很高的职业啊。记得那是小学时代,很多同学的理想。

      这里使用自己定义语法的脚本代码生成混沌图像.相关软件参见:YChaos生成混沌图像.如果你对数学生成图形图像感兴趣,欢迎加入QQ交流群: 367752815

    [1]

    [ScriptLines]
    t=1 - 1.4*x*x + y
    y=0.3*x
    x=t
    
    [Variables]
    x=0.000000
    y=0.000000

    这图像太一般了。

    [2]

    改下参数看看:

    [ScriptLines]
    u=1 - a*x*x + b*y
    v=x - y
    x=u
    y=v
    
    [Variables]
    a=0.186500
    b=-0.985000
    x=0.010000
    y=0.010000

    比第一幅强了些。

    [3]

    再加点改动

    [ScriptLines]
    u=1 - a*x*x + b*y
    v=x - y
    l=sqrt(u*u + v*v)
    u=if(l<0.01,u/0.01,u)
    v=if(l<0.01,v/0.01,v)
    x=x+u
    y=y+v
    l=sqrt(x*x + y*y)
    l=mod(l, 1.5)/l
    x=if(l<1,x*l,x)
    y=if(l<1,y*l,y)
    
    [Variables]
    a=1.280000
    b=-0.985000
    x=0.010000
    y=0.010000

    [4]

    加点随机扰动

    [ScriptLines]
    u=1 - a*x*x + b*y
    v=x - y
    l=sqrt(u*u + v*v)
    u=if(l<0.01,u/0.01,u)
    v=if(l<0.01,v/0.01,v)
    x=x+u
    y=y+v
    l=sqrt(x*x + y*y)
    l=mod(l, 1.5)/l
    x=if(l<1,x*l,x) + rand2(-r,r)
    y=if(l<1,y*l,y)
    
    [Variables]
    a=1.280000
    b=-0.985000
    r=0.001000
    x=0.010000
    y=0.010000

    [5]

    再看G公式:

    [ScriptLines]
    b=sin(a)
    c=cos(a)
    t=x*c - y*b + x*x*b
    y=x*b + y*c - x*x*c
    x=t
    
    [Variables]
    a=3.000000
    x=1.000000
    y=1.000000

    一个大圈。

    [6]

    改动一下:

    [ScriptLines]
    b=sin(a)
    c=cos(a)
    t=x*c - y*b + x*x*b
    y=x*b + y*c - x*x*c
    x=mod(t, 4)
    y=mod(y,4)
    
    [Variables]
    a=3.678000
    x=1.000000
    y=1.000000

    有点猫头鹰的样子了

    [7]

    最终版本:

    [ScriptLines]
    b=sin(a)
    c=cos(a)
    t=x*c - y*b + x*x*b
    y=x*b + y*c - x*x*c
    x=mod(t, 4) + rand2(-r,r)
    y=mod(y,4) + rand2(-r,r)
    
    [Variables]
    a=3.647602
    r=0.001000
    x=1.000000
    y=1.000000

  • 相关阅读:
    对json按某个键的值进行排序(转载)
    nrm -- NPM registry 管理工具
    easyui-filebox 文件上传
    Netty,Thrifty
    VS2015 framework4.5代码提示英文切换为中文
    .NET Runtime version 2.0.50727.8762
    js moment.js日期操作类 datetime,日期操作,dayjs
    Oracle.ManagedDataAccess.dll
    打造自己的JavaScript武器库(转)
    Vue.js实战 5.5章 购物车
  • 原文地址:https://www.cnblogs.com/WhyEngine/p/4330481.html
Copyright © 2011-2022 走看看