zoukankan      html  css  js  c++  java
  • YChaos生成混沌图像

          YChaos是一款通过数学公式生成混沌图像的软件,展示混沌之美,数学之美。软件中定义一套简易的脚本语言,用于描述数学表达式。使用时需要先要将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图形与图像。该软件与我之前写的Why数学图像生成工具WHY数学图形可视化工具(开源)有很大关联。它们使用的是同一套数学表达式解析代码。如果你对数学生成图形图像感兴趣,欢迎加入QQ交流群: 367752815

    一、软件使用

      双击"YChaos图像生成软件.exe"启动软件

         软件中有两种模式:编辑模式与图像生成模式。默认打开时为编辑模式,键盘F1用于两种模式的切换。键盘F2用于切换到图像生成模式,并进行图像生成处理。鼠标右键拖动用于设置视口位置,滚轮用于视口的缩放。按下键盘F,会自动设置成最佳视口。按下键盘X则设置成默认大小的视口,这可使图像处于其原始大小显示。

         文件夹"images"中存放各种生成图像的配置文件。鼠标将某一配置文件拖入到软件中,即可打开文件。也可以通过菜单项中的“文件->打开配置文件...”来进行文件选择打开。亦可以使用快捷键CTRL+F来加载配置文件。下图为打开了一个洛伦茨吸引子的点集截图:

     

         打开某个配置文件后,会进入编辑模式,当按下F2会切换到图像生成模式并生成混沌图像。如下图所示:

     

       按下F5通过菜单项中的“视图->数学脚本编辑面板...”可以打开数学脚本编辑面板,在此对数学公式进行编辑修改。如下图所示:

     

       在编辑模式下,右边会有一控件,用于设置数学公式的初始变量值。

     

      当公式编辑完成后,如果希望将点集转化成图像,需要设置成像剪裁范围,通过下图控件进行设置:

     

          其中有个按钮“Auto Set Extend”会自动按点集的范围设置成像剪裁范围。用户也可以直接在二维场景中调节该剪裁范围。

          在图像生成模式下,可以设置图像的显示通道,如RGB三个颜色通道,图像反色等。将点集数据转化成彩色图像,可采用两种方式,一为颜色表达式,另一个是伪彩表。下图为使用伪彩+反色的图像:

     

          图像生成模式下有一个控件用于图像生成控制:

     

          按钮“Process”用于对图像的生成。

    二、软件原理

          YChaos会对用户输入的数学公式进行迭代处理,所谓迭代就是将自己的输出再做为自己的输入,不断地做循环处理。所谓迭代函数是指将函数的输出再次当作输入进行迭代计算。

          有人一碰到数学就发怵,不要担心,生成混沌的数学公式通常很简单。例如输入的公式为:

    x = sin(y)+0.5 

    y = sin(x)+0.5

          给定x,y的初始值后,不停地执行这两个公式,每一次执行将获得一对(x,y)数值,最后将每一次生成的(x,y)值的集合生成一个点集图形和一幅图像。

          再如上面图像中的洛伦茨吸引子,其公式所需要的表达式为:

    u=a*(y - x)

    v=b*x - y - x*z

    w=x*y - c*z

    x=x+u*t

    y=y+v*t

    z=z+w*t

          有了上述公式,还需要为相应的变量设置初始值,上面图像中使用的初始值为:

    a=10.000000

    b=28.000000

    c=2.666667

    t=0.001000

    x=-10.000000

    y=10.000000

    z=25.000000

    三、脚本语法

          既然要将数学公式以计算机能识别的方式表达出来,就需要一套脚本语言。

    [1]常量

    目前有以下9个常量值

    PI   3.1415927

    E   2.7182818

    GOLD    0.6180034

    SQRT2    1.4142136

    SQRT3    1.7320508

    DEGREE     57.2957795130824f       // 180 / PI

    RADIAN     0.01745329251994f       // PI / 180

    MILLIONTH  0.000001f               // 百万分之一

    DIMI        0.0001f                 // 万分之一

    常量名都为大写字母,在公式中如 (PI + E) 或 sin(PI*0.5)

    [2]数值解析

    对整数的解析支持2,8,10,16四种进制

      (1)0X开头为16进制, XABCDEF大小写都可以0xffff 

      (2)0Y开头为2进制, Y大小写都可以0y10101010000

      (3)0开头为8进制07523, 注意出现了"08"之类的会解析失败

      (4)默认为10进制

    对浮点数的解析支持两种方式 

      (1)形如”0.12”的格式,不能省略前面的0,

      (2)科学表达格式.形如1.2e2

    [3]变量及其赋值

    系统中的所有数据类型都为float类型,有两种变量类型:

    1.固定变量

    系统中使用a-z26个英文小写字母表示变量,变量能够存储单个实数,或一个实数数组.如果为实数数据,则其数组大小为之前设置的顶点数目(3).

    设置为单个实数

    a = 3.1415 // a赋值为3.1415
    固定变量中x,y将组成2D顶点位置坐标,用于图形与图像的生成。

    2.临时变量

    可以自定义名的变量,以字母或下划线开头的字符串,最多有7个字节。

    [4]运算符

    完整的运算符说明请看文档:《运算符说明.txt

    1.标准单目运算符

    +,-

    :a = -b

    2.标准双目运算符

    +,-,*,/,%,^ <,>,=,&,|

    :c = a * b 如果a,b都为单个实数则运算结果c也是单个实数,否则c为实数数组

    3.函数单目运算符 形如sin(a)

    positive,negative,abs,floor,ceil,sign,sqrt,exp,log,log2,log10,sin,cos,tan,asin,acos,atan,rand  

    4.函数双目运算符 形如pow(a, b)

    add,sub,multiply,divide,max,min,mod,pow,atan2,rand2,   

    5.函数三目运算符 形如lerp(a, b, r)

    lerp,clamp,gray,add3,min3,max3,average3

    6.函数四目运算符 形如average4(a, b, c, d)

    add4,min4,max4,average4

    [5]运算符嵌套使用

    支持{}, [], ()这三类括号标志符,括号必需成对出现.支持最大32级括号的嵌套.

    (2+(-2+(5.0*(9 + ((1+2)*3))/3) + 2))

    -{exp[5*sqrt(1 -abs[sin{rand(100)}]) + 6]}

    [6]表达式语句

    脚本中有三类表达式:

    正常语句,形如:u=a*(y - x)表示将等号右边公式计算出来的数值赋给左边变量。

    静态语句,形如:k = [static]0.5*q*(u*u + v*v)在公式前面加了一个[static]前缀,表示该表达式只在脚本处理的开始执行一遍。

    循环语句,形如:y=[loop:64]k+y*y表示该表达式需要循环执行64遍。

    四、配置文件

    用户编辑好一个混沌图像后,可以将其保存到一个配置文件中,其配置文件的格式如下:

    [ScriptLines] 这是数学公式

    u=a*(y - x)

    v=b*x - y - x*z

    w=x*y - c*z

    x=x+u*t

    y=y+v*t

    z=z+w*t

     

    [Variables] 这是公式所需要设置的变量初始值

    a=10.000000

    b=28.000000

    c=2.666667

    t=0.001000

    x=-10.000000

    y=10.000000

    z=25.000000

     

    [ColorTable] 颜色表公式,用于将顶点数据转化为彩色图像

    Size=1024

    Red=log(v*4)*18.0

    Green=log(v*3)*20.0

    Blue=

    ColorScaleRed=1.000000

    ColorScaleGreen=1.000000

    ColorScaleBlue=1.000000

     

    [Pseudo]  图像伪彩,将顶点数据转化为彩色图像的另一种方式

    WinPos=127

    WinWid=255

    PseudoName=Default

    Used=false

     

    [Params]  其他相关参数

    Iteration=10000000 公式的总迭代次数

    StepValue=0.000100

    ImageMinX=-25.677399 顶点坐标转化成图像时所需要的剪裁范围

    ImageMinY=-25.972094

    ImageMaxX=24.993305

    ImageMaxY=24.698610

    ProcessSpeed=2000   生成图像时的速度

    软件下载地址:

    1.1版本: http://files.cnblogs.com/files/WhyEngine/YChaos_1_1.7z

    2.0版本: http://files.cnblogs.com/files/WhyEngine/YChaos_2_0.7z

    相关文章:

    混沌的艺术--- YChaos通过数学公式生成混沌图像

  • 相关阅读:
    Android 常见工具类封装
    Android Logcat 封装类
    Android 四大组件之 " Activity "
    "浅谈Android"第一篇:Android系统简介
    罗列的书单
    关于多层架构一些思考
    LeetCode 330. Patching Array
    LeetCode 315. Count of Smaller Numbers After Self(线段树,树状数组)
    LeetCode 316. Remove Duplicate Letters(贪心)
    LeetCode 327. Count of Range Sum(线段树)
  • 原文地址:https://www.cnblogs.com/WhyEngine/p/4305150.html
Copyright © 2011-2022 走看看