編輯推薦
怎麼通過軟件捕捉自然界難以捉摸的演進和突變?
理解物理世界背後的數學原理對我們創造數字世界有多大幫助?
本書介紹瞭用計算機模擬自然係統涉及的編程策略與技術,涵蓋瞭基本的數學和物理概念,以及可視化地展示模擬結果所需的高級算法。讀者將從構建基本的物理引擎開始,一步一步地學習如何創建智能移動的物體和復雜的係統,為進一步探索生成設計奠定基礎。相關的知識點包括力、三角、分形、細胞自動機、自組織和遺傳算法。本書的示例使用基於Java的開源語言及開發環境Processing編寫。
作為紐約大學Tisch藝術學院Nature of Code課程主講老師,Daniel集閤瞭多年開發和教學經驗,希望藉由此書讓大傢真正瞭解如何用代碼模擬自然現象。
內容簡介
《代碼本色:用編程模擬自然係統》由紐約大學Nature of Code課程老師Daniel Shiffman寫就,是一本藉助開源語言Processing全麵介紹如何用代碼模擬自然世界的學習指南。作者從模擬生命物體、活物、智能係統三個層麵,從手工編寫Processing代碼到使用現有的物理函數庫模擬高級而復雜的行為,利用有趣的事例漸進式介紹瞭算法和模擬方麵的高級編程策略和技術。主要內容涉及嚮量、力、粒子係統、三角函數、自治智能體、細胞自動機、分形、遺傳算法和人工神經網絡。
《代碼本色:用編程模擬自然係統》適閤遊戲設計師、好學的程序員、物理學愛好者及所有對計算機模擬和互動編程感興趣的人學習參考。
作者簡介
Daniel Shiffman,紐約大學Tisch藝術學院助理藝術教授,Nature of Code便是其主講課程之一。多年來,他一直用Processing這門藝術傢友好型開源語言開發教程、教學示例和代碼庫,擁有豐富的算法和應用教學經驗。另外,其著作Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction亦廣受讀者好評。
內頁插圖
精彩書評
★“自然現象的模擬技術可以應用於程序式建模(如地形、植物)、程序式動畫(如粒子特效、雲層變化)、遊戲邏輯(如剛體物理)、人工智能(如非玩傢角色的移動)……這本書作為這個領域的入門書籍,使用瞭簡易的Processing編程語言作為例子,非專業程序員也會很容易理解。”
——葉勁峰,知名遊戲程序員,《遊戲引擎架構》譯者
★“很多編程書讀起來味同嚼蠟,大多數的編程課程同樣枯燥無趣。這本書卻是趣味橫生。每一章都快速全麵地介紹一個有趣主題,而這些主題介紹得還相當深入。遺傳算法、神經網絡,等等,哇!這些主題通常一個就需要至少一本書的篇幅來講解。本書給齣瞭我目前所知最深入淺齣的數學解釋。”
——一位從事編程20餘年的程序員
★“2012年春天,我在NYU ITP讀研究生時上過Daniel Shiffman的Nature of Code課,漸進式學習瞭他講授的全部內容,現在重讀這本書更是讓我驚嘆。我會嚮任何對運動、物理、可編程藝術、遊戲等感興趣的人強烈推薦這本書。……總之,這本書絕對值得一讀,所有藝術傢/設計師/碼農的書架上都應該有一本!”
——紐約大學Nature of Code課程學生
★“很久很久以前,我在Director中用Lingo做Shockwave遊戲編程。那時,我經常在深夜花費大量時間,上網搜尋關於‘轉動慣量’之類的文章,最後寫齣的代碼經常是超級繁瑣而且缺陷很多。……而在閱讀這本書五分鍾之後,我得到的‘啊哈,原來應該這麼實現’的頓悟,比當初五年的鑽研所得到的還要多!”
——資深Shockwave 遊戲設計師
目錄
第0章 引言
0.1 隨機遊走
0.2 隨機遊走類
0.3 概率和非均勻分布
0.4 隨機數的正態分布
0.5 自定義分布的隨機數
0.6 Perlin噪聲(一種更平滑的算法)
0.6.1 映射噪聲
0.6.2 二維噪聲
0.7 前進
第1章 嚮量
1.1 嚮量
1.2 Processing中的嚮量
1.3 嚮量的加法
1.4 更多的嚮量運算
1.4.1 嚮量的減法
1.4.2 嚮量加減法的運算律
1.4.3 嚮量的乘法
1.4.4 更多的嚮量運算律
1.5 嚮量的長度
1.6 單位化嚮量
1.7 嚮量的運動:速度
1.8 嚮量的運動:加速度
1.9 靜態函數和非靜態函數
1.10 加速度的交互
第2章 力
2.1 力和牛頓運動定律
2.1.1 牛頓第一運動定律
2.1.2 牛頓第三運動定律
2.1.3 牛頓第三運動定律(從Processing的角度錶述)
2.2 力和Processing的結閤:將牛頓第二運動定律作為一個函數
2.3 力的纍加
2.4 處理質量
2.5 製造外力
2.6 地球引力和力的建模
2.7 摩擦力
2.8 空氣和流體阻力
2.9 引力
2.10 萬有引(斥)力
第3章 振蕩
3.1 角度
3.2 角運動
3.3 三角函數
3.4 指嚮運動的方嚮
3.5 極坐標係和笛卡兒坐標係
3.6 振蕩振幅和周期
3.7 帶有角速度的振蕩
3.8 波
3.9 三角函數和力:鍾擺
3.10 彈力
第4章 粒子係統
4.1 為什麼需要粒子係統
4.2 單個粒子
4.3 使用ArrayList
4.4 粒子係統類
4.5 由係統組成的係統
4.6 繼承和多態的簡介
4.7 繼承基礎
4.8 用繼承實現粒子類
4.9 多態基礎
4.10 用多態實現粒子係統
4.11 受力作用的粒子係統
4.12 帶排斥對象的粒子係統
4.13 圖像紋理和加法混閤
第5章 物理函數庫
5.1 Box2D及其適用性
5.2 獲取Processing中的Box2D
5.3 Box2D基礎
5.3.1 SETUP
5.3.2 DRAW
5.3.3 Box2D世界的核心元素
5.4 生活在Box2D的世界
5.5 創建一個Box2D物體
5.5.1 第1步:定義一個物體
5.5.2 第2步:設置物體的定義
5.5.3 第3步:創建物體
5.5.4 第4步:為物體的初始狀態設置其他屬性
5.6 三要素:物體、形狀和夾具
5.6.1 第1步:定義形狀
5.6.2 第2步:創建夾具
5.6.3 第3步:用夾具將形狀連接到物體上
5.7 Box2D和Processing的結閤
5.7.1 第1步:在主程序(即setup()和draw()函數)中添加Box2D
5.7.2 第2步:建立Processing盒子對象和Box2D物體對象之間的聯係
5.8 固定的Box2D對象
5.9 彎麯的邊界
5.9.1 第1步:定義一個物體
5.9.2 第2步:定義形狀
5.9.3 第3步:配置形狀
5.9.4 第4步:使用夾具將形狀連接到物體上
5.10 復雜的形狀
5.11 Box2D關節
5.11.1 步驟1:確保有兩個物體
5.11.2 步驟2:定義關節
5.11.3 步驟3:配置關節的屬性
5.11.4 步驟4:創建關節
5.12 迴到力的話題
5.13 碰撞事件
5.13.1 步驟1:Contact對象,你能否告訴我哪兩個物體發生瞭碰撞
5.13.2 步驟2:夾具對象,你能否告訴我你連接在哪個物體上
5.13.3 步驟3:物體,你能否告訴我你連接在哪個粒子對象上
5.14 小插麯:積分法
5.15 toxiclibs的Verlet Physics物理庫
5.15.1 獲取toxiclibs
5.15.2 VerletPhysics的核心元素
5.15.3 toxiclibs中的嚮量
5.15.4 構建toxiclibs的物理世界
5.16 toxiclibs中的粒子和彈簧
5.17 整閤代碼:一個簡單的交互式彈簧
5.18 相連的係統I:繩子
5.19 相連的係統II:力導嚮圖
5.20 吸引和排斥行為
第6章 自治智能體
6.1 內部的力
6.2 車輛和轉嚮
6.3 轉嚮力
6.4 到達行為
6.5 你的意圖:所需速度
6.6 流場
6.7 點乘
6.8 路徑跟隨
6.9 多段路徑跟隨
6.10 復雜係統
6.11 群體行為(不要碰到對方)
6.12 結閤
6.13 群集
6.14 算法效率(為什麼程序跑得這麼慢)
6.15 最後的幾個注意事項:優化技巧
6.15.1 長度的平方(或距離的平方)
6.15.2 正弦餘弦查詢錶
6.15.3 創建不必要的PVector對象
第7章 細胞自動機
7.1 什麼是細胞自動機
7.2 初等細胞自動機
7.3 如何編寫初等細胞自動機
7.4 繪製初等CA
7.5 Wolfram分類
7.6 生命遊戲
7.7 編寫生命遊戲
7.8 麵嚮對象的細胞實現
7.9 傳統CA的變化
第8章 分形
8.1 什麼是分形
8.2 遞歸
8.3 用遞歸函數實現康托爾集
8.4 科赫麯綫和ArrayList技術
8.5 樹
8.6 L係統
第9章 代碼的進化
9.1 遺傳算法:啓發自真實現象
9.2 為什麼使用遺傳算法
9.3 達爾文的自然選擇
9.4 遺傳算法,第一部分:創建種群
9.5 遺傳算法,第二部分:選擇
9.6 遺傳算法,第三部分:繁殖
9.7 創建種群的代碼
9.7.1 第1步:初始化種群
9.7.2 第2步:選擇
9.7.3 第3步:繁殖
9.8 遺傳算法:整閤代碼
9.9 遺傳算法:創建自己的遺傳算法
9.9.1 第1點:更改變量
9.9.2 第2點:適應度函數
9.9.3 第3點:基因型和錶現型
9.10 力的進化:智能火箭
9.11 智能火箭:整閤代碼
9.12 交互式選擇
9.13 生態係統模擬
9.13.1 基因型和錶現型
9.13.2 選擇和繁殖
第10章 神經網絡
10.1 人工神經網絡:導論和應用
10.2 感知器
10.3 用感知器進行簡單的模式識彆
10.4 實現感知器
10.5 轉嚮感知器
10.6 還記得這是個"網絡"嗎
10.7 神經網絡圖
10.8 實現前饋動畫
10.9 結語
參考文獻
索引
前言/序言
這是一本什麼書
我在ITP教授一門名為“計算媒體導論”的課。在這門課中,學生主要學習一些編程基礎知識(變量、條件語句、循環、對象和數組等)。除此之外,他們還學習如何使用基本元素(圖像、像素、計算機視覺、組網、數據和3D等)開發交互式應用。課程內容以我之前寫的入門書Learning Processing為主,而本書是Learning Processing的續篇。一旦你掌握瞭編程基礎並且接觸瞭形形色色的應用場景,接下來很可能就是深入研究某個特定的方嚮。舉個例子,你可以專注於計算機視覺(比如閱讀Greg Borenstein寫的Making Things See等書)。當然,本書的內容隻是眾多發展方嚮之一,它隻是延續瞭Learning Processing,展示瞭Processing語言在算法和模擬方麵的更高級編程技術。
本書的目標非常簡單:我們想看看真實世界中發生的各種自然現象,以及如何通過編程對它們進行模擬。
那這到底是一本什麼樣的書?這是不是一本有關科學的書?我可以很肯定地迴答:不是。事實上,我們確實會涉及物理學和生物學的個彆話題,但不會從嚴謹的學術層麵進行研究,因為這不在本書講述範圍之內。相反,我們會簡單探討某些科學原理,隻攫取我們需要的那一部分內容,並根據它們構建相關的示例程序。
那這是不是一本有關藝術或設計的書呢?我還是會迴答:不是。盡管我們的工作結果都是視覺上可見的事物(用Processing開發的演示動畫),但也僅僅是用簡單的圖形和色彩做齣的演示,我們真正專注的是它們背後的算法和相關編程技術。然而,我還是希望藝術工作者和設計師們能將本書中的知識融入工作實踐,創造一些真正新穎有趣的作品。
如果非要給這本書歸類,我覺得它隻是一本普普通通的編程書。盡管書中的一些章節取材自科學原理(比如牛頓物理學、細胞生長、進化等),而且一些編程結果會激發藝術創作的靈感,但歸根結底本書重心是代碼的實現,尤其是其中的麵嚮對象編程技術。
關於Processing語言
本書使用Processing語言,原因有很多。第一,它是我用著最舒服的編程語言和開發環境,我很喜歡用它來工作;第二,它是免費開源的,並且非常適閤初學者,它的開發者社區很活躍。對很多人來說,Processing或許是他們學習的第一門編程語言。因此,我希望這本書能擁有廣泛的受眾,並希望通過Processing用一種友好的方式闡述其中的原理。
本書中所寫的例子並不嚴格限定於Processing語言,我們還可以用ActionScript、JavaScript、Java(脫離Processing開發環境),或是其他開源的“創意編程”開發環境,比如openFrameworks、Cinder,以及最近發布的pocode。我希望自己完成這本書之後,能將本書中的例子移植到其他開發環境中,並發布其他語言的示例程序。如果你對移植本書的示例程序感興趣,請隨時聯係我(daniel@ shiffman.net)。
本書中的所有示例都已在Processing 2.0b6版本上測試通過,大部分例子也兼容早期版本。我會時常更新這些示例,使它們兼容最新版本。
……
圖靈程序設計叢書·代碼本色:用編程模擬自然係統 [The Nature of Code:Simulating Natural Systems with Processing] 下載 mobi epub pdf txt 電子書 格式
圖靈程序設計叢書·代碼本色:用編程模擬自然係統 [The Nature of Code:Simulating Natural Systems with Processing] 下載 mobi pdf epub txt 電子書 格式 2024
圖靈程序設計叢書·代碼本色:用編程模擬自然係統 [The Nature of Code:Simulating Natural Systems with Processing] 下載 mobi epub pdf 電子書
圖靈程序設計叢書·代碼本色:用編程模擬自然係統 [The Nature of Code:Simulating Natural Systems with Processing] mobi epub pdf txt 電子書 格式下載 2024