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-z的26个英文小写字母表示变量,变量能够存储单个实数,或一个实数数组.如果为实数数据,则其数组大小为之前设置的顶点数目(见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通过数学公式生成混沌图像

YChaos生成混沌图像的更多相关文章

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

    艺术真得很难吗?也许如同编程一样容易.我写了一套软件,其功能是通过输入数学方程式,生成艺术图像.一提到数学有人可能会发怵,这里请不要担心,生成混沌的数学公式大都很是简单,基本上只用加.减.乘.除.余. ...

  2. 利用ASP.NET一般处理程序动态生成Web图像(转)

    摘自:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955262.html 一般处理程序的扩展名为ashx,它实现了IHttpHandler接口, ...

  3. Opencv Sift和Surf特征实现图像无缝拼接生成全景图像

    Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分: 1. 特征点提取和描述 2. 特征点配对,找到两幅图像中匹配点的位置 3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生 ...

  4. php生成雪花图像(不美观请见谅)

    <?php /*  //新建图像 //雪花  @header("Content-Type:image/png"); $w = 500; $h = 500; //create ...

  5. 对抗生成网络-图像卷积-mnist数据生成(代码) 1.tf.layers.conv2d(卷积操作) 2.tf.layers.conv2d_transpose(反卷积操作) 3.tf.layers.batch_normalize(归一化操作) 4.tf.maximum(用于lrelu) 5.tf.train_variable(训练中所有参数) 6.np.random.uniform(生成正态数据

    1. tf.layers.conv2d(input, filter, kernel_size, stride, padding) # 进行卷积操作 参数说明:input输入数据, filter特征图的 ...

  6. 为训练深度OCR 图像,生成文本图像

    https://github.com/Sanster/text_renderer Generate text images for training deep learning ocr model 在 ...

  7. 【Python图像特征的音乐序列生成】图像特征在旋律生成中有什么用

    jishude 首先援引一个资料网页:http://www.cosmosshadow.com/ml/%E5%BA%94%E7%94%A8/2016/03/01/%E9%9F%B3%E4%B9%90%E ...

  8. 在pyqt5中展示pyecharts生成的图像

    技术背景 虽然现在很少有人用python去做一些图形化的界面,但是不得不说我们在日常大部分的软件使用中都还是有可视化与交互这样的需求的.因此pyqt5作为一个主流的python的GUI框架地位是非常重 ...

  9. Opencv 使用Stitcher类图像拼接生成全景图像

    Opencv中自带的Stitcher类可以实现全景图像,效果不错.下边的例子是Opencv Samples中的stitching.cpp的简化,源文件可以在这个路径里找到: \opencv\sourc ...

随机推荐

  1. 用Backbone.js创建一个联系人管理系统(二)

    欢迎大家回来继续这一教程,第一部分我们学习了model,collection和view在Backbone中的 基本用法,还有怎么样用主视图去绑定collection去渲染出每个Contact. 这部分 ...

  2. JS延时提示框

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...

  3. php实现验证码

      验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码.好吧,其实是没有事情干,但是又不想浪费时间,所以学习了下php实现验证码.正所谓,技多不压身.而且 ...

  4. step byt step之餐饮管理系统一

    之前写过2015年的工作计划,其中有一项就是写一套管理系统,一来可以练练手,二来可以加强自己的学习,三来可以多园友多交流,共同进步.所以从今天开始把写系统的过程记录下来.先需求分析开始. 第一部分 引 ...

  5. 数据库知识整理<一>

    关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...

  6. Web 开发中 20 个很有用的 CSS 库

    转自:http://www.oschina.net/translate/css-libraries-for-developers 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供 ...

  7. git ssh key创建和github使用

    github拉代码需要ssh验证 git是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置.   一 .设置git: 设置git的user name和ema ...

  8. UML类图基本元素符号

     UML类图基本元素符号 元素名称 符号图例 含义 Class 包含类的名称.属性和方法定义. 可见性修饰符: + public -  private # protected 无修饰符为 intern ...

  9. 深入理解java虚拟机【Java虚拟机类生命周期】

    C/C++等纯编译语言从源码到最终执行一般要经历:编译.连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对 ...

  10. 倔强的网站数据抓取,关键时刻还需Webbrowser显身手

    由于最近台风挺多,公司网站上需要挂上台风预报信息,就整了个抓取台风数据(至于抓数据的概念和实践手册我以前写的一篇博客里面有介绍:分享一套抓数据小程序,客户资料.实时新闻.股票数据…随心抓)的服务,做调 ...