本次主要是思考一些哲学问题,而不是为了单纯的发什么代码,因为,这些代码其实很简单,当然,简单归简单,我肯定还是会贴出来的。
这个同样也是MBA课堂上摸鱼的时候随便弄的而已,和上次那个小人互殴的东西其实异曲同工,只是少了战斗的元素。
我的设定很简单,两个群体,可以视作两个分子群,除了不能离开画面以外,可以在整个画面随机移动,当他们数量低的时候,看不出什么,但是,当他们的数量足够多的时候,就可以看到类似分子扩散那样的效果。这些分子像极了滴入水池中的墨点,在不规则无序的布朗运动的作用下最终会扩散到可以活动的边界。
这让我想到了熵增的概念。一个封闭的系统总是会不断的熵增,最终达到无序的最大化。同时,一个扩散的系统,除非受到边界(不可抗因素)的约束,不然总是会持续扩散的。我觉得对于群体,对于文明,对于生命而言均是如此。我们在微观尺寸上看待分子、原子运动的时候,感觉这些分子、原子都是无序化的东西,但是由他们组成的生命却通过摄取能量持续的对抗熵增,甚至能实现永生(即彻底的逆熵,但是必须有能量的输入)。我们再看看我们现在所处的宏观世界,一切生命似乎都充满了某种独立意志,小到一个孢子,大到一个人,都似乎成了一个个有意识的独立的系统,似乎生命就成了“无序”的反义词。但是我觉得,这个“宏观”其实是不够宏观的,看问题的尺度还是太小,偏安于极短的历史周期和我们这个小小的星球。我们不妨往人类文明或者说智慧文明的发展方向继续思考下去。如果文明持续发展,进入了星际阶段,那么文明就会像下图中的一个个小色点一样做布朗运动持续对外扩散。即使有的文明挂了,在宇宙尺度上,依然有无数的文明在持续着这个扩散的过程。从这个超宏观尺度思考的话,文明的扩散和墨点在水池中的扩散竟然是何其相似!!也就是最智能的事物的行为竟与最简单的原子分子的看似无序的行为是相一致的。那么我就不得不思考两个问题了:
第一,原子分子这样的简单结构是否本质上是个超智能体,看似无序的扩散是不是其实是一种智能行为?
第二,生命的所谓逆熵是不是本来就是宇宙系统的一环而不是偶然,所谓的生命,本质只不过是超大分子,也许这些超大分子看起来似乎都有独立意识,似乎都有独立行为,但是当把他们看成一个整体的时候,竟发现他们是集体无意识的,是没有独立行为的,这实在是一种相当诡异的感觉。
于是我想到了太极的双鱼图,有序之中蕴藏着无序,而无序之中也蕴藏着有序,有无相生相容,似乎宇宙的热寂并不会是宇宙的尽头,似乎宇宙中注定会有生命能够解决大热寂的问题,最终实现系统的永恒轮转。
扯远了,就先想到这里吧。明天又要搬砖了。
情人节的时候画了一只轻松熊给我的在职研的同学兼同事。希望这次能成吧。
<html>
<body style="width:100%;height:100%;overflow:hidden;margin:0;background-color:black;"></body>
<script type="text/javascript">
var w = window.innerWidth;
var h = window.innerHeight;
var arr = [];
function randomGenerate(W,H,a,b,r,g,b){
var div = document.createElement("div");
div.style = "border-radius:20px;position:absolute;width:20px;height:20px;background-color:deepskyblue;"
div.x = Math.random() * (W?W:w) + (a?a:0);
div.y = Math.random() * (H?H:h) + (b?b:0);
div.vx = (Math.random()>0.5?-1:1) * (Math.random()*2+0.5);
div.vy = (Math.random()>0.5?-1:1) * (Math.random()*2+0.5);
div.style.left = div.x + "px";
div.style.top = div.y + "px";
var r = parseInt(Math.random() * 255*(r?r:1));
var g = parseInt(Math.random() * 255*(g?g:1));
var b = parseInt(Math.random() * 255*(b?b:1));
div.style.backgroundColor = 'rgb('+r+','+g+','+b+')';
div.update = function(lerp){
if(Math.random()<0.1) this.vx = (Math.random()>0.5?-1:1) * (Math.random()*2+0.5);
if(Math.random()<0.1) this.vy = (Math.random()>0.5?-1:1) * (Math.random()*2+0.5);
this.x += this.vx*lerp/10;
this.y += this.vy*lerp/10;
if(this.x<0){
this.x = 0;
}
if(this.x>w){
this.x = w;
}
if(this.y<0){
this.y = 0;
}
if(this.y>h){
this.y = h;
}
this.style.left = this.x + "px";
this.style.top = this.y + "px";
}
arr.push(div);
document.body.appendChild(div);
}
function run(){
for(var i=0;i<500;i++){
randomGenerate(w*0.05,h*0.05,1,1,5,1,1);
}
for(var i=0;i<500;i++){
randomGenerate(w*0.05,h*0.05,w,h,1,1,5);
}
var lastTime = new Date();
var currentTime = new Date();
var lerp;
function x(){
currentTime = new Date();
lerp = currentTime - lastTime;
for(var i=0;i<arr.length;i++){
arr[i].update(lerp);
}
requestAnimationFrame(x);
lastTime = currentTime;
}
requestAnimationFrame(x);
}
run();
</script>
</html>