內容介紹
《代碼本色:用編程模擬自然系統》適合遊戲設計師、好學的程式設計師、物理學愛好者及所有對計算機模擬和互動編程感興趣的人學習參考。
目 錄
第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 相連的系統I:繩子 209
5.19 相連的系統II:力導向圖 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