更改

跳到导航 跳到搜索
删除487字节 、 2015年12月12日 (六) 15:53
无编辑摘要
第14行: 第14行:  
</gallery><br />
 
</gallery><br />
   −
如果是复杂点的图案呢?我们仍然可以如法炮制,不过麻烦了点,因为你需要告诉这幢大楼里的每一个同学是开灯还是关灯。<br />
+
:如果是复杂点的图案呢?我们仍然可以如法炮制,不过麻烦了点,因为你需要告诉这幢大楼里的每一个同学是开灯还是关灯。<br />
−
如果要让霓虹灯图案动起来呢?比如每1秒钟就变换一下图案,那么你就需要给每个朋友编制一些指令,告诉他们在什么时刻是开灯还是关灯。我们不妨用0表示关灯,用1表示开灯,那么比如指令011011001指派给了住在第三行第4列的朋友,那么他应该在第1秒内关灯,在第二秒、第三秒都开灯,第四秒关...。汗,这恐怕太麻烦了,你算算,如果要展示一个10分钟的动画(600秒)那就需要为每个窗户后面的朋友编制长度600的指令。何况很可能这里有100扇窗户呢!<br />
+
:如果要让霓虹灯图案动起来呢?比如每1秒钟就变换一下图案,那么你就需要给每个朋友编制一些指令,告诉他们在什么时刻是开灯还是关灯。我们不妨用0表示关灯,用1表示开灯,那么比如指令011011001指派给了住在第三行第4列的朋友,那么他应该在第1秒内关灯,在第二秒、第三秒都开灯,第四秒关...。汗,这恐怕太麻烦了,你算算,如果要展示一个10分钟的动画(600秒)那就需要为每个窗户后面的朋友编制长度600的指令。何况很可能这里有100扇窗户呢!<br />
   −
如果你够聪明,可以换一种方法来制作你的大楼霓虹灯动画。让居住在大楼里面的每个朋友密切观察他的邻居,根据上一秒内他邻居的开灯状况决定下一秒内该朋友的动作。显然每个窗户后的朋友都会有上、下、左、右、左上、右上、左下、右下八个邻居(如下图),那么每个人的开灯状态就会被他的邻居们以及他自己的上一时刻的开灯状态所影响,并且翻过来这位朋友是否开灯又会影响他的邻居们,整个大楼的各个窗户就会不停的闪烁,这也能达到动画的效果了。
+
:如果你够聪明,可以换一种方法来制作你的大楼霓虹灯动画。让居住在大楼里面的每个朋友密切观察他的邻居,根据上一秒内他邻居的开灯状况决定下一秒内该朋友的动作。显然每个窗户后的朋友都会有上、下、左、右、左上、右上、左下、右下八个邻居(如下图),那么每个人的开灯状态就会被他的邻居们以及他自己的上一时刻的开灯状态所影响,并且翻过来这位朋友是否开灯又会影响他的邻居们,整个大楼的各个窗户就会不停的闪烁,这也能达到动画的效果了。
 
<gallery>
 
<gallery>
 
File:屏幕快照 2015-12-11 23.06.21.png|一个窗户和它的八个邻居,分别是左上、上、右上、左、右、左下、右下
 
File:屏幕快照 2015-12-11 23.06.21.png|一个窗户和它的八个邻居,分别是左上、上、右上、左、右、左下、右下
第26行: 第26行:  
== 生命游戏 ==
 
== 生命游戏 ==
 
:好了,上面基本讲清楚了大楼霓虹灯的工作原理了,下面我们开始设计一个切实的动画。按照刚才讲到的聪明的霓虹灯动画设计方法,我们为每个窗户后面的朋友设计规则如下:<br />
 
:好了,上面基本讲清楚了大楼霓虹灯的工作原理了,下面我们开始设计一个切实的动画。按照刚才讲到的聪明的霓虹灯动画设计方法,我们为每个窗户后面的朋友设计规则如下:<br />
−
规则1.如果我现在开着灯,只要八个邻居中有2个或者3个人开灯了,那么下一时刻我才开灯,否则邻居亮灯数超过3个或者少于2个,我都会把灯关掉;<br />
+
# 规则1.如果我现在开着灯,只要八个邻居中有2个或者3个人开灯了,那么下一时刻我才开灯,否则邻居亮灯数超过3个或者少于2个,我都会把灯关掉;<br />
   −
规则2:如果我现在关着灯,那么当邻居中有3个人开灯,那么下一个时刻我就把灯打开。比如某个窗户和他邻居窗户的开灯状态如下图示:
+
# 规则2:如果我现在关着灯,那么当邻居中有3个人开灯,那么下一个时刻我就把灯打开。比如某个窗户和他邻居窗户的开灯状态如下图示:
 
<gallery>
 
<gallery>
 
File:屏幕快照 2015-12-11 23.08.20.png|
 
File:屏幕快照 2015-12-11 23.08.20.png|
 
</gallery><br />
 
</gallery><br />
   −
其中中
+
:其中中心位置的窗户为你所在的窗户(也就是图中的4号),在这个时刻,你观察旁边的八个邻居中有左上、右上、下三个窗户是亮灯的,那么按照规则2,你在下一个时刻应该把灯打开。这样,每个窗户后面的朋友都按照这两条规则
−
心位置
+
行事,比如左上方1号这个邻居下一个时刻是否应该开灯呢?那么我们就应该考察这个窗户的8个邻居,以1号窗户为中
−
的窗户为你
+
心的9个方格如下图:
−
所
  −
在的窗户(也就是图中的
  −
4
  −
号
  −
)
  −
,在这个时刻,你观察
  −
旁边
  −
的
  −
八
  −
个
  −
邻
  −
居中有
  −
左
  −
上、
  −
右
  −
上、
  −
下三个窗户是亮灯的,
  −
那么
  −
按照规则
  −
2
  −
,
  −
你在下一个时刻应该
  −
把灯打开。
  −
这样,
  −
每个窗户
  −
后
  −
面的朋友都
  −
按照
  −
这
  −
两条规则
  −
行
  −
事
  −
,比
  −
如
  −
左
  −
上方
  −
1
  −
号
  −
这个
  −
邻
  −
居下
  −
一个时刻是
  −
否
  −
应该开灯呢?那么我们就应该
  −
考
  −
察这个窗户的
  −
8
  −
个
  −
邻
  −
居,
  −
以
  −
1
  −
号
  −
窗户
  −
为中
  −
心
  −
的
  −
9
  −
个方格如下图:
   
<gallery>
 
<gallery>
 
File:屏幕快照 2015-12-11 23.09.16.png|
 
File:屏幕快照 2015-12-11 23.09.16.png|
−
</gallery>
+
</gallery><br />
−
那么
+
 
−
根据规则
+
:那么根据规则1,下个时刻应该继续开着灯。注意,这个图中的右下部分标有1、2、3、4的4个窗户与上图中左上角标有1、2、3、4的4个窗户的开灯状态是一样的。他们都是同样的4个窗户。这样,当我们用同样的规则考虑大楼中所有的窗户的时候,整体大楼的动画就可以产生了。我们以一个随机的初始状态开始,根据那两条规则会产生什么样的大楼霓虹灯动画呢?让我们把镜头拉远,观察整个大楼:哇,一个奇妙的动画诞生了。下面是两张动画的截图(由50行50列窗户构成的大楼):
−
1
  −
,
  −
下个时刻应该
  −
继续
  −
开着灯。
  −
注
  −
意,
  −
这个图中的
  −
右
  −
下
  −
部分标
  −
有
  −
1
  −
、
  −
2
  −
、
  −
3
  −
、
  −
4
  −
的
  −
4
  −
个窗户
  −
与
  −
上图中
  −
左
  −
上
  −
角标
  −
有
  −
1
  −
、
  −
2
  −
、
  −
3
  −
、
  −
4
  −
的
  −
4
  −
个窗户的开灯
  −
状态
  −
是一样的。他们都是
  −
同样的
  −
4
  −
个窗户。
  −
这样,
  −
当我们用同样的
  −
规则考虑
  −
大楼中
  −
所
  −
有的窗户的时候,
  −
整体大楼的动画就可以
  −
产生
  −
了。
  −
我们以一个
  −
随
  −
机的
  −
初始状态
  −
开
  −
始
  −
,
  −
根据
  −
那
  −
两条规则
  −
会
  −
产生
  −
什么样的大楼霓虹灯动画呢?
  −
让我们把
  −
镜
  −
头
  −
拉远
  −
,
  −
观察整个大楼:
  −
哇
  −
,
  −
一个奇
  −
妙
  −
的动画
  −
诞生
  −
了。
  −
下面是
  −
两张
  −
动画的
  −
截
  −
图
  −
(由
  −
50
  −
行
  −
50
  −
列窗户构成的大楼)
  −
:
   
<gallery>
 
<gallery>
 
File:屏幕快照 2015-12-11 23.10.13.png|
 
File:屏幕快照 2015-12-11 23.10.13.png|
−
</gallery>
+
</gallery><br />
−
很怪
+
 
−
异
+
:很怪异不是么?如果你看到能够运动的动画你会感觉更怪异,整个大楼的窗户就像沸腾了。实际上,我们可以把整个大楼霓虹灯游戏做在电脑里,让电脑程序代替那些居住在大楼里,不停机械的开灯关灯来完成你设计的无聊动画的可怜
−
不是么?如果你看到
+
的朋友们。你可以到以下网址观看程序:gameoflife/。在程序中,方格就代表窗户,黄色的格子就是亮灯的窗户,黑色的就是关灯的。你会发现,整个电脑屏幕像煮开了一样,不停的有方格变成黄色,也有方格变成黑色,而由这些亮方格构成的图案是五花八门,奇形怪状,看这是几个截图:
−
能够运
  −
动的动画你会
  −
感
  −
觉
  −
更
  −
怪
  −
异
  −
,
  −
整个大楼的窗户就像
  −
沸腾
  −
了。
  −
实
  −
际
  −
上,
  −
我们可以把整个大楼霓虹灯游戏
  −
做
  −
在
  −
电脑
  −
里,
  −
让
  −
电脑程序代替
  −
那些居住在大楼
  −
里,
  −
不停机械的开灯关灯来
  −
完
  −
成你设
  −
计
  −
的
  −
无聊
  −
动画的可
  −
怜
  −
的朋友们。
  −
你可以到以下
  −
网址
  −
观看
  −
程序
  −
:
  −
gam
  −
e
  −
oflife/
  −
。在
  −
程序
  −
中,
  −
方格就
  −
代
  −
表窗户,
  −
黄
  −
色的格子就是亮灯的窗户,
  −
黑色的就是
  −
关灯的。
  −
你会
  −
发
  −
现,整个
  −
电脑屏幕
  −
像
  −
煮
  −
开了一样,不停的有方格变成
  −
黄
  −
色,也有方格变成黑色,
  −
而由这些亮方格构成的图案是
  −
五花八门
  −
,奇
  −
形
  −
怪
  −
状
  −
,看这是几个
  −
截
  −
图:
   
<gallery>
 
<gallery>
 
File:屏幕快照 2015-12-11 23.10.58.png|
 
File:屏幕快照 2015-12-11 23.10.58.png|
−
</gallery>
+
</gallery><br />
−
这些图案有
+
 
−
风筝
+
:这些图案有风筝、蝴蝶、桃心。如果观察动态结果,你会发现不可思议的东西还更多。首先,你会发现一种被人们称作“滑翔机”的结构,他是由几个格子构成的一个动态的结构,随着时间的推移,他会从屏幕的一段走到另一端,下面是“滑翔机”行走的原理:
−
、
  −
蝴蝶
  −
、
  −
桃心
  −
。如果观察动
  −
态结
  −
果,你会
  −
发
  −
现不可
  −
思议
  −
的
  −
东西
  −
还
  −
更
  −
多。
  −
首
  −
先,
  −
你会
  −
发
  −
现一种
  −
被
  −
人们
  −
称作
  −
“
  −
滑翔
  −
机”
  −
的
  −
结
  −
构,
  −
他是由几个格子构成的一个动
  −
态
  −
的
  −
结
  −
构,
  −
随
  −
着时间的
  −
推移
  −
,他会
  −
从屏幕
  −
的一
  −
段走
  −
到
  −
另
  −
一
  −
端
  −
,下面是“
  −
滑翔
  −
机”行
  −
走
  −
的
  −
原理
  −
:
   
<gallery>
 
<gallery>
 
File:屏幕快照 2015-12-11 23.12.12.png|
 
File:屏幕快照 2015-12-11 23.12.12.png|
−
</gallery>
+
</gallery><br />
−
1
+
 
−
2
+
:12345在5步内,“滑翔机”结构往右下方行走了一个格子。你可以看到,在第五步内黄色亮点组成的结构与第一步的结构完全一样,只不过位置完全平移了。“滑翔机”会偶尔在屏幕的一个角落里闪现出来,步态缓慢的移动到另一角,就好像一个悠闲的散步者,在楼宇的窗户间移动着。值得注意的是,你可以推敲一下,“滑翔机”的每一步移动都完全符合我们上面定义的两条动画规则。<br />
−
3
+
:我们的游戏还有其他的壮观景象:看这边由多个亮窗子构成的两个“村落”分处于大楼的角落彼此没有来往,然而一个“村落”发射了一个“滑翔机”对另一个“村落”展开了进攻,而另一个“村落”则由于这个“滑翔机”的到来被打破了原先的
−
4
+
寂静开始沸腾起来。偶尔你会看到一个村落逐渐变大、分化成两个部分分别进行繁衍......,这里的语言不能穷尽这
−
5
+
个游戏的所有可能情况。该游戏有一个好听的别名:“生命游戏”,这是由计算机科学家Johnconway在上个世纪50年代发明的。为什么叫做“生命游戏”呢?其实你不妨大胆运用你的想象力,认为这个游戏创造了一个“活生生的”宇宙。也就是说你和你的朋友们遵循简单的规则产生的集体楼宇霓虹灯动画创造了一个宇宙,这个宇宙就镶嵌在你们的楼宇的窗户之间。该宇宙按照自己的规律不断演化着。我们可以把闪亮的格子看作是这个虚拟宇宙中的生命体,这样,它们不
−
在
+
停的演化、繁殖、灭亡。
−
5
  −
步
  −
内,
  −
“
  −
滑翔
  −
机”
  −
结
  −
构
  −
往右
  −
下方行
  −
走
  −
了一个格子。你可以看到,在第
  −
五步
  −
内
  −
黄
  −
色亮
  −
点组成的
  −
结
  −
构
  −
与
  −
第一
  −
步
  −
的
  −
结
  −
构
  −
完全
  −
一样,只不
  −
过
  −
位置完全
  −
平移
  −
了。
  −
“
  −
滑翔
  −
机”会
  −
偶尔
  −
在
  −
屏幕
  −
的一个
  −
角落
  −
里闪现出来,
  −
步态缓慢
  −
的
  −
移
  −
动到
  −
另
  −
一
  −
角
  −
,
  −
就好像一个
  −
悠闲
  −
的
  −
散步者
  −
,
  −
在楼宇的窗
  −
户间
  −
移
  −
动着
  −
。
  −
值
  −
得
  −
注
  −
意
  −
的是,你可
  −
以
  −
推敲
  −
一下,
  −
“
  −
滑翔
  −
机”
  −
的每一
  −
步移
  −
动都
  −
完全符
  −
合我们上
  −
面定
  −
义
  −
的
  −
两条
  −
动画
  −
规则
  −
。
  −
我们的游戏还有其他的
  −
壮
  −
观
  −
景象
  −
:看
  −
这
  −
边
  −
由多个亮窗子构成的
  −
两
  −
个“
  −
村落
  −
”
  −
分处于
  −
大楼
  −
的
  −
角落彼此
  −
没有来
  −
往
  −
,
  −
然而一个
  −
“
  −
村落
  −
”
  −
发射
  −
了一个
  −
“
  −
滑翔
  −
机”
  −
对另
  −
一个
  −
“
  −
村落
  −
”
  −
展
  −
开了
  −
进
  −
攻
  −
,而
  −
另
  −
一个
  −
“
  −
村落
  −
”
  −
则
  −
由
  −
于
  −
这个
  −
“
  −
滑翔
  −
机”
  −
的到来
  −
被
  −
打
  −
破
  −
了
  −
原
  −
先的
  −
寂静
  −
开
  −
始沸腾
  −
起来。
  −
偶
  −
尔
  −
你会看到一个
  −
村落逐渐
  −
变大、
  −
分化
  −
成
  −
两
  −
个
  −
部分分别进
  −
行
  −
繁衍......
  −
,
  −
这里的
  −
语言
  −
不
  −
能穷尽
  −
这
  −
个游戏的
  −
所
  −
有可
  −
能情况
  −
。
  −
该游戏有一个好
  −
听
  −
的
  −
别名
  −
:
  −
“
  −
生命
  −
游戏
  −
”
  −
,
  −
这是由
  −
计算
  −
机
  −
科
  −
学
  −
家
  −
Joh
  −
n
  −
c
  −
onw
  −
ay
  −
在上个
  −
世纪
  −
50
  −
年代发
  −
明的。为什么
  −
叫做
  −
“
  −
生命
  −
游戏”呢?
  −
其实你不妨
  −
大
  −
胆运
  −
用你
  −
的想
  −
象力
  −
,
  −
认
  −
为这个
  −
游戏
  −
创造
  −
了一个
  −
“
  −
活生生
  −
的”
  −
宇宙。
  −
也就是
  −
说
  −
你和你的朋友们
  −
遵循
  −
简单的
  −
规则产生
  −
的集体楼
  −
宇霓虹灯动画
  −
创造
  −
了一个宇宙,
  −
这个宇宙就
  −
镶嵌
  −
在你们的楼宇的窗户之间。
  −
该宇宙
  −
按照
  −
自己
  −
的
  −
规律
  −
不断
  −
演化
  −
着。
  −
我们可以把闪亮的格子看
  −
作
  −
是这个
  −
虚拟
  −
宇宙中的
  −
生命
  −
体,
  −
这样,
  −
它们不
  −
停的
  −
演化
  −
、
  −
繁殖
  −
、
  −
灭亡
  −
。
   
== 从霓虹灯到方格宇宙 ==
 
== 从霓虹灯到方格宇宙 ==
−
这一
+
:这一切又意味着什么呢?从霓虹灯的例子中我们体会到了系
−
切又
  −
意味
  −
着
  −
什
  −
么呢?
  −
从
  −
霓
  −
虹灯的
  −
例
  −
子
  −
中我们
  −
体
  −
会
  −
到了系
   
统
 
统
 
的
 
的

导航菜单