OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7002|回复: 11

STM32下的元胞自动机(二维宇宙模拟)

[复制链接]

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
发表于 2015-1-13 12:29:25 | 显示全部楼层 |阅读模式

霍金在The Grand Design中写道
"In the Game of Life, as in our world, self-reproducing patterns are complex objects. One estimate, based on the earlier work of mathematician John von Neumann, places the minimum size of a self- replicating pattern in the Game of Life at ten trillion squares—roughly the number of molecules in a single human cell."

这里Game指的是Law而非游戏,Einstein说过“The god does not play the game which throw the dice."。
Game与Law的不同在于前者是不定的,如同Schrodinger's Cat的状态是不定的。

如果模拟宇宙的维数达到11,并且有合适的Law及相应起始状态,复现我们这个世界也是可能的,这便是The Grand Design之意。

由于是既定的演化路径,故而可用单片机/计算机模拟二维宇宙演化。

以下是编码原则(摘自霍金的书The Grand Design第八章)

The world Conway envisioned is a square array, like a chessboard, but extending infinitely in all directions. Each square can be in one of two states: alive (shown in green) or dead (shown in black). Each square has eight neighbors: the up, down, left, and right neighbors and four diagonal neighbors. Time in this world is not continuous but moves forward in discrete steps. Given any arrangement of dead and live squares, the number of live neighbors determine what happens next according to the following laws:

1.  A live square with two or three live neighbors survives (survival).
2.  A dead square with exactly three live neighbors becomes a live cell (birth).
3.  In all other cases a cell dies or remains dead. In the case that a live square has zero or one neighbor, it is said to die of loneliness; if it has more than three neighbors, it is said to die of overcrowding.


上图是自己用51单片机在12864液晶上模拟的二维宇宙演化,该宇宙的演化经历时间为43演化单位。

由于硬件的限制,运行较慢。关于51单片机+12864液晶上运行可参看我这个帖子:
http://www.51hei.com/bbs/dpj-30303-1.html

后改在STM32上运行,效果明显提升:


此模拟方案可用于:
1. 练习编写与液晶/单片机有关的代码优化;
2. 测试硬件性能,类似计算PI来评价计算机性能的那个程式;
3. 制作屏保。

其它网友的作品(在计算机上运行出来的,可搬到单片机上来)
1.网友withparadox2的作品


2.另外一位网友的作品


3.一位网友在彩色液晶上做的屏保




附件中是可在STM32上运行的元胞自动机代码。
若您手上有MiniSTM32 3.0的板子,可到下述链接下载完整代码:
http://www.openedv.com/posts/list/0/45108.htm

Cellular STM32.c

2.62 KB, 下载次数: 256

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2015-1-13 12:33:36 | 显示全部楼层
霍金的书向来以难懂著称,为了让更多朋友能看懂,我稍翻译下霍金书上的文字:

The world Conway envisioned is a square array, like a chessboard, but extending infinitely in all directions. Each square can be in one of two states: alive (shown in green) or dead (shown in black). Each square has eight neighbors: the up, down, left, and right neighbors and four diagonal neighbors. Time in this world is not continuous but moves forward in discrete steps. Given any arrangement of dead and live squares, the number of live neighbors determine what happens next according to the following laws:

Conway架构了一个可无限延展的二维棋盘阵列。
每格仅阴阳二态:阳(绿)阴(黑)。(请参看书中附图)
每格8邻:上下左右及四斜角。
此世界中的时间是离散而非连续。
若给定阴阳变易法则及始态,则可向时间轴前方推演此世界:

1.  A live square with two or three live neighbors survives (survival).
2.  A dead square with exactly three live neighbors becomes a live cell (birth).
3.  In all other cases a cell dies or remains dead. In the case that a live square has zero or one neighbor, it is said to die of loneliness; if it has more than three neighbors, it is said to die of overcrowding.

1. 若阳格周围有 2 ~ 3 阳格,其继为阳。
2. 若阴格周围恰 3 阳格,此格转阳。
3. 其他所有情形,阴继为阴。阳格周阳格少则死于孤寂;反之死于拥挤。

霍金的The Grand Design请到这下载:
http://vdisk.weibo.com/s/B4iksprsm65q
相关编码原理请参考第八章

以上资料仅供交流学习之用~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-13 19:51:16 | 显示全部楼层
表示看不懂啊。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2015-1-13 22:17:56 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
有点类似探索者的“FPU 测试(Julia 分形)实验”,需要根据前一轮的结果推演下一轮,不过不涉及浮点运算。
这里是一个网页版的有意可看一看:
http://copy.sh/life/

维基百科对元胞自动机的介绍:
http://en.wikipedia.org/wiki/Cellular_automaton
此概念最早由Stanislaw Ulam and John von Neumann提出。
回复 支持 反对

使用道具 举报

3

主题

138

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2014-5-12
在线时间
4 小时
发表于 2015-1-13 22:18:03 | 显示全部楼层
楼主在第一部分,讲的是基本介绍,指的是把液晶屏可以分为n个点,每个格子类似于是0和1(只有两种颜色),每个格子是有8个邻边(在我们平常的观点里面加上了四个斜角),   
  第二部分,讲的是变化规律,也就是动画,
1. 若阳格周围有 2 ~ 3 阳格,其继为阳。 相当于一个格子是1,它的邻边也有2~3个格子是1的话,那他就保持1 ;
2.若阴格周围恰 3 阳格,此格转阳。 若一个格子为0,它的邻边正好有3个1的话,那它就转为1 ;
3.其他所有情形,阴继为阴。阳格周阳格少则死于孤寂;反之死于拥挤。  0继续是0,1旁边只有1个或者0个 1的话,那它就会孤寂而死;
1旁边若有多于3个 1的话,那它就会拥挤而死

以上是个人呢的理解,不知可对?感觉霍金写的还是很深奥啊,算法转换很难啊不过这样都被大侠转到单片机上了,佩服啊
回复 支持 反对

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2015-1-13 22:28:28 | 显示全部楼层
回复【5楼】伤剑使者:
---------------------------------
基本是这个意思。

算法实现上比原子老师的“FPU 测试(Julia 分形)实验”要简单。
只是里头的哲学问题要明白过来不是那么容易。(宇宙创生原理)


这里有个霍金那书的中文版,各位可下载对照英文版一看:
http://vdisk.weibo.com/s/zaMynb5rbrLIA
回复 支持 反对

使用道具 举报

3

主题

138

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2014-5-12
在线时间
4 小时
发表于 2015-1-13 22:30:32 | 显示全部楼层
貌似这个程序不是全的,能否问一下这个if(system_task_return)break; 怎么处理 u8 Cellular_Play(u8* caption)  这个起始的时候些什么呢?
回复 支持 反对

使用道具 举报

3

主题

138

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2014-5-12
在线时间
4 小时
发表于 2015-1-13 22:31:37 | 显示全部楼层
回复【6楼】exv:
---------------------------------
还没学到F407额,103都是学了这么长时间还是水的要命
回复 支持 反对

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2015-1-13 22:52:19 | 显示全部楼层
如果您往应用中心模块添加过自己的APP应该明白怎么实现。

样例中有一个红外的,可依样画葫芦:
在app_play(void)里改一段:(原来是if函数,再加个if函数也行)
[mw_shl_code=c,true]switch(selx) { case 0: Remote_Play(appdev->icos[selx].name);system_task_return=0;break; case 1: Cellular_Play(appdev->icos[selx].name);system_task_return=0;break; }[/mw_shl_code]
其它说明文字什么的可改可不改。

另外,u8* caption没用到,可去掉。
 
探索者其实多出的是一些视频音频以及一些涉及大量浮点运算的等,可以看出,原子老师应该是花了很多的时间在这款新板子上,
学的时候可以照着探索者的资料,填代码的时候用mini板/战舰板的代码。
回复 支持 反对

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2015-1-16 22:08:09 | 显示全部楼层
回复【7楼】伤剑使者:
---------------------------------
如果您用的是Mini 3.0的板子,可以到我这个帖子下载完整程序(附件3):
http://www.openedv.com/posts/list/0/45108.htm
回复 支持 反对

使用道具 举报

3

主题

138

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2014-5-12
在线时间
4 小时
发表于 2015-1-17 01:28:55 | 显示全部楼层
谢谢了,我去试试
回复 支持 反对

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
 楼主| 发表于 2015-1-17 23:37:22 | 显示全部楼层
重新修改了下代码,支持互动式绘图(可在屏幕上绘制元胞):



按钮说明:
WHITE/BLACK:点击后画笔变为相应颜色。
STOP/RUN:运行切换。
CLEAR:清屏
STEP+:向前演化一步。
完整代码以下链接的附件4:
http://www.openedv.com/posts/list/0/45108.htm
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 21:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表