首个“永生人”将诞生,这件事情确实有很大的争议,根据消息说永生人死后仍可与人对话,虚拟长生到底有没有意义呢?给大家具体说明一下:
一、永生人是一个高科技的噱头,没有生命意义:
一个人的生命确实十分的珍贵,因为每一个人的生命都非常的有限,所以才值得我们珍惜。现在人类开始研究如何能够永生,其中一个办法就是通过高端的计算机技术,虚拟出一个人的思想和记忆力。这件事情实际上就是一个打着高科技口号的噱头,没有任何的实际性意义。因为人的生命存在于血肉之间,存在于人的自主性。这种技术方面的所谓永久生命,根本不具有独立性,所以根本没有价值。
二、虚拟生命仅仅还是虚拟,真正的生命早就消失:
根据爱因斯坦的狭义相对论和广义相对论的分析,物质之间都存在着一种恒定的转换机制,能量和物质之间有着非常神奇的联系。所以,当一个人失去生命的时候,那么也就标志着这个人离开的世界。虚拟生命其实就是一种电脑计算出来的模拟程序,跟以往的生命体不存在物理方面的任何联系,所以真正的生命根本不存在了!
三、永生人只是程序永生:
一个人的思维是根据不同的事情,进行不同的处理,所以这个人才能够真正的存在!永生人是建立一个程序,然后将一个人的思维、记忆全部综合在这个程序里面,其实人已经死亡了。程序只不过想复录机一样,所以没有任何意义!
本世纪70年代,人们曾疯魔一种被称作“生命游戏”的小游戏,这种游戏相当简单。假设有一个像棋盘一样的方格网,每个方格中放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。游戏规则如下:1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生,即该细胞若原先为死,则转为生,若原先为生,则保
持不变;
2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
3. 在其它情况下,该细胞为死,即该细胞若原先为生,则转为死,若原先为死,则保持不变。
依此规则进行迭代变化,使细胞生生死死,会得到一些有趣的结果。该游戏之所以被称为“生命游戏”,是因为其简单的游戏规则,反映了
自然界中的生存规律:如果一个生命,其周围的同类生命太少的话,会因为得不到帮助而死亡;如果太多,则会因为得不到足够的资源而死亡。
用计算机模拟这个“生命游戏”也相当简单,可以用一个m×n像素的图像来代表m×n个细胞,其中每一个像素,代表一个细胞,像素为黑色
表示细胞为生,像素为白色代表细胞为死。
设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案。
下面给出的小程序是用tc2.0编写。演示100×100个生命细胞初始状态全为生时的变代情况,变化时边缘细胞不参与变化。随着迭代次数的不
同,在屏幕显示的图案精彩纷呈,像万花筒般引人入胜。
#include <graphics.h>
main(){
int orgdata[100][100],resdata[100][100]/*分别记录每次迭代的初始和结果状态*/
int ncount,nrows,ncols,i,j,times/*times记录迭代次数*/
int graphdriver=detect,graphmode
for (i=0i<100i++) /*初始化数据,令每一个细胞为生*/
for (j=0j<100j++) orgdata[i][j]=1
initgraph(&graphdriver,&graphmode,′′′′)/*初始化屏幕显示*/
setcolor(white)
rectangle(270,190,370,290)/*作显示边框*/
for (times=1times<200times++){
for (nrows=1nrows<99nrows++) {
for (ncols=1ncols<99ncols++){
/*计算每一个细胞周围的活的细胞数*/
ncount=orgdata[nrows-1][ncols-1]+orgdata[nrows-1][ncols]
+orgdata[nrows-1][ncols+1]+orgdata[nrows][ncols-1]
+orgdata[nrows][ncols+1]+orgdata[nrows+1][ncols-1]
+orgdata[nrows+1][ncols]+orgdata[nrows+1][ncols+1]
switch(ncount){
/*周围有3个活细胞,该细胞为生,在屏幕上用黑色像素表示*
case 3: putpixel(ncols+210,120+nrows,black)
resdata[nrows][ncols]=1break
/*周围有2个活细胞,该细胞不变,在屏幕显示也不变*/
case 2: resdata[nrows][ncols]=orgdata[nrows][ncols]
break
/*其它情况下,细胞为死,在屏幕上用白色像素表示*/
default:resdata[nrows][ncols]=0
putpixel(ncols+210,120+nrows,white)
}
}
}
for (i=1i<99i++)
for (j=1j<99j++) orgdata[i][j]=resdata[i][j]
getch()
}
}
在计算机上运行上述程序,得到迭代次数为45、69、74、78、97、116、119和156时的图像分别如上图所示。
在实际模拟时,可以取更多的生命细胞,也可以考虑生命细胞的初始状态是依一定概率设定的随机状态,变化时也可以让边缘细胞参与变化。
只要对上述程序略作更改,就会得到另外一系列美妙绝伦的图案。
#include<iostream>
using namespace std
#include<time.h>
#define M 70
#define N 20
void mShow(int a[N+2][M+2])
{ int i,j
for ( i=0i<Ni++,cout<<endl )
for ( j=0j<Mj++ )
if ( a[i+1][j+1] ) cout<<'*'
else cout<<'.'
//cout<<( a[i+1][j+1] )?('*'):(' ')
}
int mJduge(int a[N+2][M+2])
{ int i,j,k,s,*p[9],b[N][M]
for ( i=0i<Ni++ )
{
p[0]=p[4]=p[5]=&a[i+1][1] p[4]-- p[5]++ // 1 2 3
p[1]=p[2]=p[3]=p[0]-M-2 p[1]-- p[3]++ // 4 0 5
p[6]=p[7]=p[8]=p[0]+M+2 p[6]-- p[8]++ // 6 7 8
for ( j=0j<Mj++ )
{ for ( k=1,s=0k<9k++ ) s+=(*p[k])
b[i][j]=*p[0]
if ( s>=3 ) b[i][j]=1
else if ( s<2 ) b[i][j]=0
for ( k=0k<9k++ ) p[k]++
}
}
for ( i=0,s=1i<Ni++ ) for ( j=0j<Mj++ ) { a[i+1][j+1]=b[i][j] if ( b[i][j]==0 ) s=0 }
return s
}
void main()
{
int a[N+2][M+2],b[N][M],*p[9]
int t,i,j,k
for ( i=0i<N+2i++ ) for ( j=0j<M+2j++ ) a[i][j]=0
srand((unsigned int)time(NULL))
for ( i=0i<Ni++ ) for ( j=0j<Mj++ ) { k=rand()%100 a[i+1][j+1]=( k>=77 )?(1):(0) }
cout<<"-------- T=0--------"<<endl mShow(a)
k=0 t=0
while ( !k )
{ k=mJduge(a) t++
cout<<"-------- T="<<t<<" --------"<<endl mShow(a)
}
}
a数组比实际要的数组大一圈,大出来的一圈永恒等于0,作为边界,省得计算8连通数据时数组越界
b数组用于计算本次的结果,计算完成后复制、覆盖a数组中间部分作为结果
主程序做直到所有空间都被活细胞占满情况停止
以下是设置M=10,N=5的测试部分结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)