代碼本色:用編程模擬自然系統 代码本色:用编程模拟自然系统 (图灵程序设计丛书)

Daniel Shiffman

買這商品的人也買了...

商品描述

《代碼本色:用編程模擬自然系統》由紐約大學Nature of Code課程老師Daniel Shiffman寫就,是一本借助開源語言Processing全面介紹如何用代碼模擬自然世界的學習指南。

作者從模擬無生命物體、活物、智能系統三個層面,從手工編寫Processing代碼到使用現有的物理函數庫模擬高級而復雜的行為,利用有趣的事例漸進式介紹了算法和模擬方面的高級編程策略和技術。

主要內容涉及向量、力、粒子系統、三角函數、自治智能體、細胞自動機、分形、遺傳算法和人工神經網絡。

《代碼本色:用編程模擬自然系統》適合游戲設計師、好學的程序員、物理學愛好者及所有對電腦模擬和互動編程感興趣的人學習參考。

怎麼通過軟件捕捉自然界難以捉摸的演進和突變?
理解物理世界背後的數學原理對我們創造數字世界有多大幫助?

本書介紹了用計算機模擬自然系統涉及的編程策略與技術,涵蓋了基本的數學和物理概念,以及可視化地展示模擬結果所需的高級算法。讀者將從構建基本的物理引擎開始,一步一步地學習如何創建智能移動的物體和復雜的系統,為進一步探索生成設計奠定基礎。相關的知識點包括力、三角、分形、細胞自動機、自組織和遺傳算法。本書的示例使用基於Java的開源語言及開發環境Processing編寫。

作為紐約大學Tisch藝術學院Nature of Code課程主講老師,Daniel集合了多年開發和教學經驗,希望藉由此書讓大家真正瞭解如何用代碼模擬自然現象。

作者簡介

Daniel Shiffman 紐約大學Tisch藝術學院助理藝術教授,Nature of Code便是其主講課程之一。

多年來,他一直用Processing這門藝術家友好型開源語言開發教程、教學示例和代碼庫,擁有豐富的算法和應用教學經驗。

另外,其著作Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction亦廣受讀者好評。

目錄大綱

第0章引言1 
0.1隨機遊走1 
0.2隨機遊走類2 
0.3概率和非均勻分佈6 
0.4隨機數的正態分佈9 
0.5自定義分佈的隨機數12 
0.6 Perlin噪聲(一種更平滑的算法) 14 
0.6.1映射噪聲16 
0.6.2二維噪聲18 
0.7前進21 
第1章向量23 
1.1向量24 
1.2 Processing中的向量26 
1.3向量的加法28 
1.4更多的向量運算31 
1.4.1向量的減法32 
1.4.2向量加減法的運算律33 
1.4.3向量的乘法34 
1.4.4更多的向量運算律36 
1.5向量的長度36 
1.6單位化向量38 
1.7向量的運動:速度39 
1.8向量的運動:加速度43 
1.9靜態函數和非靜態函數47 
1.10加速度的交互49 
第2章力54 
2.1力和牛頓運動定律54 
2.1.1牛頓第一運動定律54 
2.1.2牛頓第三運動定律55
2.1.3牛頓第三運動定律(從Processing的角度表述) 56 
2.2力和Processing的結合:將牛頓第二運動定律作為一個函數57 
2.3力的累加58 
2.4處理質量59 
2.5製造外力61 
2.6地球引力和力的建模65 
2.7摩擦力67 
2.8空氣和流體阻力70 
2.9引力75 
2.10萬有引(斥)力83 
第3章振盪86 
3.1角度86 
3.2角運動88 
3.3三角函數92 
3.4指向運動的方向93 
3.5極坐標系和笛卡兒坐標系96 
3.6振盪振幅和周期98 
3.7帶有角速度的振盪101 
3.8波104 
3.9三角函數和力:鐘擺107 
3.10彈力114 
第4章粒子系統122 
4.1為什麼需要粒子系統122 
4.2單個粒子123 
4.3使用ArrayList 127 
4.4粒子系統類132 
4.5由系統組成的系統134 
4.6繼承和多態的簡介136 
4.7繼承基礎138
4.8用繼承實現粒子類142 
4.9多態基礎144 
4.10用多態實現粒子系統145 
4.11受力作用的粒子系統147 
4.12帶排斥對象的粒子系統151 
4.13圖像紋理和加法混合156 
第5章物理函數庫160 
5.1 Box2D及其適用性161 
5.2獲取Processing中的Box2D 162 
5.3 Box2D基礎163 
5.3.1 SETUP 164 
5.3.2 DRAW 164 
5.3.3 Box2D世界的核心元素164 
5.4生活在Box2D的世界165 
5.5創建一個Box2D物體167 
5.5.1第1步:定義一個物體167 
5.5.2第2步:設置物體的定義168 
5.5.3第3步:創建物體168 
5.5.4第4步:為物體的初始狀態設置其他屬性169 
5.6三要素:物體、形狀和夾具169 
5.6.1第1步:定義形狀169 
5.6.2第2步:創建夾具169 
5.6.3第3步:用夾具將形狀連接到物體上170 
5.7 Box2D和Processing的結合171 
5.7.1第1步:在主程序(即setup()和draw()函數)中添加Box2D 173
5.7.2第2步:建立Processing盒子對象和Box2D物體對象之間的聯繫173 
5.8固定的Box2D對象176 
5.9彎曲的邊界177 
5.9.1第1步:定義一個物體177 
5.9.2第2步:定義形狀177 
5.9.3第3步:配置形狀177 
5.9.4第4步:使用夾具將形狀連接到物體上178 
5.10複雜的形狀180 
5.11 Box2D關節186 
5.11.1步驟1:確保有兩個物體189 
5.11 .2步驟2:定義關節189 
5.11.3步驟3:配置關節的屬性190 
5.11.4步驟4:創建關節190 
5.12回到力的話題195 
5.13碰撞事件196 
5.13.1步驟1:Contact對象,你能否告訴我哪兩個物體發生了碰撞198 
5.13.2步驟2:夾具對象,你能否告訴我你連接在哪個物體上198 
5.13.3步驟3:物體,你能否告訴我你連接在哪個粒子對像上198 
5.14小插曲:積分法200 
5.15 toxiclibs的Verlet Physics物理庫202 
5.15.1獲取toxiclibs 203 
5.15.2 VerletPhysics的核心元素203 
5.15.3 toxiclibs中的向量203
5.15.4構建toxiclibs的物理世界204 
5.16 toxiclibs中的粒子和彈簧205 
5.17整合代碼:一個簡單的交互式彈簧207 
5.18相連的系統Ⅰ:繩子209 
5.19相連的系統Ⅱ:力導向圖211 
5.20吸引和排斥行為214 
第6章自治智能體218 
6.1內部的力218 
6.2車輛和轉向219 
6.3轉向力220 
6.4到達行為226 
6.5你的意圖:所需速度229 
6.6流場231 
6.7點乘236 
6.8路徑跟隨239 
6.9多段路徑跟隨246 
6.10複雜系統250 
6.11群體行為(不要碰到對方) 251 
6.12結合256 
6.13群集257 
6.14算法效率(為什麼程序跑得這麼慢) 263 
6.15最後的幾個注意事項:優化技巧265 
6.15.1長度的平方(或距離的平方) 266 
6.15.2正弦餘弦查詢表266 
6.15.3創建不必要的PVector對象267 
第7章細胞自動機270 
7.1什麼是細胞自動機270
7.2初等細胞自動機271 
7.3如何編寫初等細胞自動機276 
7.4繪製初等CA 281 
7.5 Wolfram分類283 
7.6生命遊戲285 
7.7編寫生命遊戲288 
7.8面向對象的細胞實現292 
7.9傳統CA的變化294 
第8章分形297 
8.1什麼是分形298 
8.2遞歸300 
8.3用遞歸函數實現康托爾集304 
8.4科赫曲線和ArrayList技術306 
8.5樹313 
8.6 L系統320 
第9章代碼的進化327 
9.1遺傳算法:啟發自真實現象327 
9.2為什麼使用遺傳算法328 
9.3達爾文的自然選擇330 
9.4遺傳算法,第一部分:創建種群330 
9.5遺傳算法,第二部分:選擇332 
9.6遺傳算法,第三部分:繁殖334 
9.7創建種群的代碼336 
9.7.1第1步:初始化種群336 
9.7.2第2步:選擇338 
9.7.3第3步:繁殖340 
9.8遺傳算法:整合代碼342 
9.9遺傳算法:創建自己的遺傳算法345
9.9.1第1點:更改變量345 
9.9.2第2點:適應度函數346 
9.9.3第3點:基因型和表現型348 
9.10力的進化:智能火箭350 
9.11智能火箭:整合代碼354 
9.12交互式選擇360 
9.13生態系統模擬363 
9.13.1基因型和表現型366 
9.13.2選擇和繁殖367 
第10章神經網絡371 
10.1人工神經網絡:導論和應用372 
10.2感知器374 
10.3用感知器進行簡單的模式識別376 
10.4實現感知器377 
10.5轉向感知器383 
10.6還記得這是個“網絡”嗎388 
10.7神經網絡圖390 
10.8實現前饋動畫394 
10.9結語400 
參考文獻401 
索引404