javascript
用javascript模拟分子扩散并思考熵与序
本次主要是思考一些哲學問題,而不是為了單純的發什么代碼,因為,這些代碼其實很簡單,當然,簡單歸簡單,我肯定還是會貼出來的。
這個同樣也是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>?
總結
以上是生活随笔為你收集整理的用javascript模拟分子扩散并思考熵与序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tesseract-ocr使用以及训练方
- 下一篇: 简单记录一下使用python pyppe