最近看了很多与混沌相关的知识,并写了若干小软件.混沌现象是个有意思的东西,同时混沌也能够生成许多有意思的图形.混沌学的现代研究使人们渐渐明白,十分简单的数学方程完全可以模拟系统如瀑布一样剧烈的行为。输入端微小的差别能够迅速放大到输出端,变成压倒一切的差别,这种现象被称为“对初始条件的敏感性”。

混沌现象其基本含义可以概括为:聚散有法,周行而不殆,回复而不闭。意思是说混沌轨道的运动完全受规律支配,但相空间中轨道运动不会中止,在有限空间中永远运动着,不相交也不闭合。浑沌运动表观上是无序的,产生了类随机性,也称内在随机性。混沌系统具有三个关键要素:一是对初始条件的敏感依赖性;二是临界水平,这里是非线性事件的发生点;三是分形维,它表明有序和无序的统一。混沌系统经常是自反馈系统,出来的东西会回去经过变换再出来,循环往复,没完没了,任何初始值的微小差别都会按指数放大,因此导致系统内在地不可长期预测。

这一节将先展示下混沌点集所生成的图形.这是一个生成混沌离散点集图形的DEMO,里面含有多个不同方程生成的混沌图形.在这个DEMO中,会看到由点集生成的看得出规律的及看不出规律的图形.

下载地址为:http://files.cnblogs.com/WhyEngine/chaos.7z

软件中有两种视口显示模式,三维和二维的.键盘O用于二者间的切换.
鼠标右键用于控制视口.

键盘G用于是否显示网格的切换

-------------------------------------------------------------

在这种离散点集的混沌图形中,使用迭代的方法生成顶点数据: 
在中学课本中我们学过,一个一元函数,通常可以表示为: Y=f(x) 这里X是自变量,Y是因变量。
例如: Y=3X+1,如果X=1,那么Y=4;如果X=4,那么Y=13;总之,如果X被确定,那么相应的Y也被确定。

我们用一个抽象的符号F,来表示Y遵循X变化的因果关系。废话连篇的解释是:数字Y随数字X的变化而变化,Y由X来决定,决定的依据是“关系”F。

如果我们利用某个关系函数,比如Y=F(X),代入一个X算出一个Y,又将Y作为新的X再次计算下一个Y………如此不断,这种方法在数学上称为迭代,具体的表达式是: Xn =F(X n-1 ),n=1,2,3……..

学过程序的人一定知道"费波那齐数列",它算是比较典型的Xn =F(X n-1 )方程的例子。不过这种方程不是收敛的,所以它的图形几下就会爆表。

OK,那先帖下我写的有关这种离散方程对象的基类定义代码:

  1. #define SET_GET_FLOAT_PROPERTY(name) \
  2. void Set##name##(float v)\
  3. {\
  4. m_##name## = v;\
  5. }\
  6. float Get##name##() const\
  7. {\
  8. return m_##name##;\
  9. }
  10.  
  11. #define PI 3.14159265f
  12.  
  13. // --------------------------------------------------------------------------------------
  14.  
  15. class DiscreteEquation
  16. {
  17. public:
  18. DiscreteEquation()
  19. {
  20. m_StartX = 0.0f;
  21. m_StartY = 0.0f;
  22.  
  23. m_ParamA = 0.0f;
  24. m_ParamB = 0.0f;
  25. m_ParamC = 0.0f;
  26. m_ParamD = 0.0f;
  27. m_ParamE = 0.0f;
  28. }
  29.  
  30. // 求迭代值
  31. virtual void IterateValue(float y, float z, float& outY, float& outZ) const = NULL;
  32.  
  33. // 计算点集的Z轴坐标
  34. static void CalculatePointsZ(void* curveVerticesPtr, unsigned int stride, unsigned int count, float minZ, float maxZ)
  35. {
  36. char* zPtr = (char*)curveVerticesPtr + *sizeof(float);
  37. float zStep = (maxZ - minZ)/(count - );
  38.  
  39. for (unsigned int i = ; i < count; i++)
  40. {
  41. *(float*)zPtr = minZ + i*zStep;
  42. zPtr += stride;
  43. }
  44. }
  45.  
  46. // 计算点集的Y轴与X轴坐标
  47. virtual void CalculatePointsXY(void* curveVerticesPtr, unsigned int stride, unsigned int count)
  48. {
  49. char* xPtr = (char*)curveVerticesPtr;
  50. char* yPtr = (char*)curveVerticesPtr + sizeof(float);
  51.  
  52. float y, x;
  53. float nx, ny;
  54.  
  55. x = m_StartX;
  56. y = m_StartY;
  57.  
  58. for (unsigned int i = ; i < count; i++)
  59. {
  60. *(float*)xPtr = x;
  61. *(float*)yPtr = y;
  62.  
  63. IterateValue(x, y, nx, ny);
  64.  
  65. x = nx;
  66. y = ny;
  67.  
  68. xPtr += stride;
  69. yPtr += stride;
  70. }
  71. }
  72.  
  73. SET_GET_FLOAT_PROPERTY(StartX);
  74. SET_GET_FLOAT_PROPERTY(StartY);
  75.  
  76. SET_GET_FLOAT_PROPERTY(ParamA);
  77. SET_GET_FLOAT_PROPERTY(ParamB);
  78. SET_GET_FLOAT_PROPERTY(ParamC);
  79. SET_GET_FLOAT_PROPERTY(ParamD);
  80. SET_GET_FLOAT_PROPERTY(ParamE);
  81.  
  82. virtual bool IsValidParamA() const {return false;}
  83. virtual bool IsValidParamB() const {return false;}
  84. virtual bool IsValidParamC() const {return false;}
  85. virtual bool IsValidParamD() const {return false;}
  86. virtual bool IsValidParamE() const {return false;}
  87.  
  88. protected:
  89. float m_StartX;
  90. float m_StartY;
  91.  
  92. float m_ParamA;
  93. float m_ParamB;
  94. float m_ParamC;
  95. float m_ParamD;
  96. float m_ParamE;
  97. };

每一种混沌点集图形,在程序中都是DiscreteEquation对象的子类.

目前,我已经实现了以下几种混沌方程,将在后来的章节中一一介绍:

(1)混沌数学之logistic模型

(2)混沌数学之二维logistic模型

(3)混沌数学之Baker模型

(4)混沌数学之CircuitChaotic(二维离散电路混沌系统)

(5)混沌数学之Arnold模型

(6)混沌数学之Standard模型

(7)混沌数学之Feigenbaum模型

(8)混沌数学之生物动力学混沌模型

(9)混沌数学之Kent模型

(10)混沌数学之帐篷模型

(11)混沌数学之ASin模型

(12)混沌数学之Henon模型

混沌数学之离散点集图形DEMO的更多相关文章

  1. 混沌数学之CircuitChaotic(二维离散电路混沌系统)

    相关软件参见:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/link?url=yg_gE7LUXCg2mXRp-ZZdfRXXIkcNj8YOhvN7 ...

  2. 混沌数学之logistic模型

    logistic回归又称logistic回归分析,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率. 相关DEMO参见:混沌数学之离散点集图形DEMO ...

  3. 混沌数学之ASin模型

    相关软件:混沌数学之离散点集图形DEMO 相关代码: class ASinEquation : public DiscreteEquation { public: ASinEquation() { m ...

  4. 混沌数学之Kent模型

    相关软件:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/7c6f4a000740be1e650e9a75.html // 肯特映射 clas ...

  5. 混沌数学之Feigenbaum模型

          1975年,物理学家米切尔·费根鲍姆(Mitchell Feigenbaum)发现,一个可用实验加以测 量的特殊数与每个周期倍化级联相联系.这个数大约是4.669,它与π并列成为似乎在数学 ...

  6. 混沌数学之Standard模型

    相关软件混沌数学之离散点集图形DEMO 相关代码: class StandardEquation : public DiscreteEquation { public: StandardEquatio ...

  7. 混沌数学之Arnold模型

    相关软件混沌数学之离散点集图形DEMO 相关代码: class ArnoldEquation : public DiscreteEquation { public: ArnoldEquation() ...

  8. 混沌数学之Baker模型

    相关DEMO参见:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/ac9b57ea172ded630b1cb65b.html class Ba ...

  9. 混沌数学之Henon模型

    相关DEMO参见:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/d51372a60029bd64783e2cc0.html?re=view ...

随机推荐

  1. TypeScript的数据类型总结

    全局下载:npm i typescript -g 编译.ts文件:tsc  1.ts自动生成对应js文件 基本类型: 1.布尔,数字,字符串 ts文件 //布尔类型 var a:boolean=tru ...

  2. IntelliJ IDEA 2017.2安装

    1.准备(终极版) 2.安装 3.破解 4.成功

  3. mysql 存储过程详解

    MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...

  4. 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 A.串串-后缀自动机模板题

    链接:https://ac.nowcoder.com/acm/contest/558/A来源:牛客网 A.串串 小猫在研究字符串. 小猫在研究字串. 给定一个长度为N的字符串S,问所有它的子串Sl…r ...

  5. 选择 React Native 的理由

    转载:选择 React Native 的理由 从开始知道 React Native 到现在已经过了5个月,真实的试用也经历了三个月的时间.阅读文档开始,了解是什么,到简单的理解为什么,都是在聆听不同的 ...

  6. 基于ONVIF协议的摄像头开发总结

    <什么是ONVIF协议>     2008年5月,由安讯士(AXIS)联合博世(BOSCH)及索尼(SONY)公司三方宣布携手共同成立一个国际开放型网络视频产品标准网络接口开发论坛,取名为 ...

  7. get与post区别大揭秘

    以往的标准答案: GET在浏览器回退时是无害的,而POST会再次提交请求. GET请求会被浏览器主动cache,而POST不会,除非手动设置. GET请求只能进行url编码,而POST支持多种编码方式 ...

  8. Socket通信原理简介

    Socket通信原理简介 字数1011 阅读1766 评论2 喜欢11 何谓socket 计算机,顾名思义即是用来做计算.因而也需要输入和输出,输入需要计算的条件,输出计算结果.这些输入输出可以抽象为 ...

  9. hdu 4544 优先队列+贪心

    题意:最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏.游戏规则很简单,用箭杀死免子即可.箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di ...

  10. 【POJ】1486:Sorting Slides【二分图关键边判定】

    Sorting Slides Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5390   Accepted: 2095 De ...