天天看點

Processing程式設計學習指南導讀

前 言

learning processing:a beginner抯 guide to programming images, animation, and interaction, second edition

本書講的是什麼

本書講了一個故事。一個關于解放與自由的故事,一個關于逐漸了解計算機基礎知識的故事。通過編寫代碼,可以創造屬于你自己的多媒體設計,而不必拘泥于已有的軟體工具。這個故事不僅僅是為科學家和工程師準備的,同時也是為你準備的。

本書是為誰準備的

本書是為初學者準備的。如果你到目前從未編寫過一行代碼,那麼本書對你來說再合适不過了。本書的前9章會由淺入深地講授程式設計的基礎知識。你并不需要任何程式設計的背景知識,隻需要有操作電腦的基礎知識——打開電腦、浏覽網頁、運作程式之類的知識就足夠了。

由于本書使用processing進行學習,是以對于那些在視覺領域學習或工作的人來說,它就更加适用了,例如圖形設計、繪畫、雕塑、建築、電影、視訊、插圖、網頁設計等。如果你從屬于上述領域(在上述領域使用電腦),你很可能精通某個特定的設計軟體(很可能不止一個軟體),例如photoshop、illustrator、autocad、maya、after effects等。而本書的意義在于使你擺脫(至少是部分擺脫)現有軟體工具的束縛。如果可以創造自己的工具,而不是使用他人的軟體,那你能創造出什麼?

如果你已經具有一定的程式設計經驗,并且對processing非常感興趣,那麼本書同樣非常有用。本書的前面幾章會為你提供一個速成的程式設計複習資料(和堅實的基礎知識),本書的後面則是關于processing程式設計的進階話題。

什麼是processing

假設你正在學習cs 101(computer science 101)課程,其中可能講到了java程式設計語言的内容。下面是課程中第一個示例程式的輸出結果:

一直以來,教授給程式員的基本指令行輸出是:

1.文本輸入(text in)→以文本的形式編寫代碼。

2.文本輸出(text out)→在指令行顯示文本輸出。

3.文本互動(text interaction)→使用者可以在指令行輸入文本,實作和程式的互動。

這個示例程式中的輸出“hello, world!”是一個經典段子,按照慣例,在各種程式設計語言教學中,“hello, world”總是作為第一個程式的文本輸出。這個示例程式最早出現在1974貝爾實驗室的備忘錄中,它是由brian kernighan撰寫的,題名為《programming in c: a tutorial》。

學習processing的優勢在于:它自身強調一種更直覺并且基于視覺回報的程式設計環境,因而它更有助于藝術家和設計師學習程式設計。

2.視覺輸出(visuals out)→在視窗顯示視覺輸出。

3.滑鼠互動(mouse interaction)→使用者通過滑鼠和程式進行互動(在本書中你會看到更多例子)。

在processing中,“hello,world!”很可能如下圖所示:

你好,圖形!

雖然看上去是相當友好的設計,但是它并沒有引人注目的感覺(在這裡暫且忽略掉第3步:互動),“hello, world!”也是這樣。然而,這種方式所聚焦的理念(通過即時的視覺回報來學習)卻是截然不同的。

processing并不是第一個遵循這種範式的語言。1967年,daniel g. bobrow、wally feurzeig和seymour papert 創造了logo程式設計語言。一名程式員使用logo語言編寫了一個指令:在螢幕上用龜标生成圖形和設計。爾後john maeda在1999年設計了名為design by numbers的語言,該語言使視覺設計師和藝術家以簡單、易用的句法來進行程式設計。

盡管這些語言具有令人驚歎的簡潔性和創新性,但它們的功能非常有限。

processing作為logo和design by numbers的直系後代,于2001年誕生于麻省理工學院媒體實驗室的美學與計算研究小組。它是由casey reas和benjamin fry設計的開源語言,當時他們是著名的計算機藝術家john maeda的研究所學生。

processing是一門開源程式設計語言,提供了對圖檔、動畫和聲音進行程式設計的環境。學生、藝術家、設計師、建築師、研究人員和業餘愛好者可以使用processing進行學習、制作原型以及作為生産工具。你可以通過視覺化界面學習計算機程式設計的基礎知識,或者作為軟體速寫本以及專業化的生産工具。除了該領域的其他相關專有軟體之外,processing為藝術家和設計師提供了一個新的選擇。

—www.processing.org

總之,processing是非常令人驚歎的。首先,它是免費的,你不用花一分錢。其次,由于processing基于java程式設計語言(本書後面的章節将會對此做進一步探讨),是以它是一門十分實用的功能性語言,沒有logo或者design by numbers語言的限制,使用processing幾乎可以實作各種功能。最後,processing是開源的。雖然在大多數情況下這并不會是本書内容的關鍵細節,可是,随着深入學習processing,你就會意識到這種開源的理念是非常寶貴的。正是源于此,大量的開發者、教師和藝術家才會聚集到一起分享作品,貢獻想法,進而大大拓展了processing。

快速浏覽一下processing.org網站,你就會發現這是一個充滿勃勃生機、具有創造力的社群。在這裡,初學者和專家通過公開交流創意和作品共享代碼。盡管網站上有完整的參考文檔,以及數量龐大的示例幫助你快速上手,但是并沒有給真正的初學者提供一個系統的詳盡教程。本書通過詳盡地介紹程式設計基礎知識和探索進階程式設計話題,可以幫助你參與到processing這個社群網站,并做出你的貢獻。

2012年,processing基金會(processing foundation)成立,它旨在規範processing軟體的目标和理念:“在程式設計知識越來越重要的今天,努力讓來自各行各業的人都能輕松學習程式設計。”為了實作這個目标,基金會大力支援幾種不同語言的軟體環境,其中包括processing(java)、p5.js(javascript)和processing.py(python)。雖然本書主要讨論java架構的知識,但是我也極力向你推薦其他幾個程式設計語言架構(如果你對建構網站感興趣的話,尤其推薦p5.js)。我同樣保留了本書所有示例的p5.js版本,你可以在http://learningprocessing.com上找到。

雖然沒有processing就不可能編寫本書,但是你要知道,本書實質上并不僅僅是一本關于processing的書。編寫本書的初衷是教會你程式設計。我隻是選擇了使用processing作為程式設計的學習環境,但本書所關注的是核心計算程式設計概念,這些概念将會在你以後學習其他程式設計語言和環境時,繼續帶領你前行。

難道我不應該學習    

在空白處填上你想學習的程式設計語言。你可能曾經聽說某門程式設計語言“flibideeflobidee”将會是未來前景最廣闊的語言。你肯定聽出來這是瞎編的,但是我敢肯定你的某個朋友曾經不斷跟你講某門語言是多麼功能強大。它是如何使得程式設計變得如此容易。使用這門語言,5分鐘之内你就能實作以前需要花費一天時間才能完成的程式。而且,它在mac上、個人電腦上,甚至烤面包機上都能運作!你還可以用它編寫一個陪你聊天的寵物!而且是用日語聊天!

事情是這樣的。那個可以解決你所有問題的神奇程式設計語言根本不會存在。沒有一門語言是完美的,processing也有與生俱來的缺陷和不足。可是processing是一個學習程式設計的很棒的起點。本書傳授計算機程式設計的基本原理,不論是使用processing、java、javascript、c、python還是其他語言,它們都會使你受益終身。

當然,對于某些項目來說,其他語言和環境可能更加适合。但processing對于大部分的項目來說都是相當不錯的選擇,尤其是媒體相關和基于螢幕的任務。對processing一個普遍的誤解是它隻适合于小打小鬧,其實并不是這樣的:許多人(包括我在内)都在項目自始至終使用processing。processing可以用來制作網絡應用、博物館和美術館的藝術裝置、公共空間的展覽互動裝置。比如,我曾經使用processing在紐約市軍隊總部的大廳裡制作一個實時的圖像視訊牆,它展示在120英尺×12英尺(沒有錯,是英尺!)大的螢幕上。

processing不僅适合于項目制作,它還非常容易上手,它真的很棒。它是免費的、完全開源的軟體;它的界面簡潔;它是基于視覺的工具;它還非常有趣;它是面向對象的語言(後面會講解)。此外,它能夠在mac端、pc端以及linux機器上運作。

但是processing的一個短闆是對于網頁的相容性不足。2001年,在processing剛誕生的時候,java applet是将實時圖形項目釋出到網頁的主要方法。可是到了2015年,java applet已經不複存在。由lauren mccarthy倡導的processing基金會的p5.js項目(http://p5js.org)現在成為一個新的選擇。關于這點,本書第21章将會具體探讨。

說了這麼多,我就是想告訴你不要再去糾結應該選擇哪門程式設計語言了,應該把精力集中到學習processing程式設計的基本原理上。這方面的知識将有助于你超越本書的有限内容,幫助你學習其他任何程式設計語言。

把想法直接寫在這本書上

假如你是一名小說家或者劇本作家,你的寫作時間僅僅是坐在計算機前打字的時間嗎?大多數情況下并不是這樣。或許是晚上躺在床上的時候,腦海中突然出現了一些想法;或許是坐在公園的長椅上惬意地喂着鴿子時,腦海中上演着一幕幕的對話;又或許是有一天晚上在酒吧,你在紙巾上快速勾勒出一個精彩的故事情節。

好吧,其實編寫軟體、程式、代碼并沒有什麼不同。隻是由于程式設計工作本質上和計算機緊緊捆綁在一起,是以你常常會忘記這一點。但有機會的話,你一定要讓你的頭腦發散、暢想。在遠離辦公桌、電腦的時候去頭腦風暴一些奇思妙想。就我個人而言,我常常在慢跑的時候完成了程式設計工作最棒的構思。

當然,使用電腦實際輸入代碼的部分也是非常重要的。我的意思是,雖然不可能僅僅通過舒舒服服地躺在遊泳池裡就能完成一個複雜的任務,但如果隻是每天伏案工作,面對着刺眼的顯示器,這是遠遠不夠的。

是以,随時在書上做筆記就是一個好的方法,這樣能鍛煉你離開鍵盤後思考代碼的能力。我已在本書中包含了許多填空形式的練習題。(這些練習題的所有答案都可以在本書配套網站http://learningprocessing.com上找到,友善你檢查自己的答案。)充分利用本書的空白處吧!每當你有靈感和想法的時候,就迅速把它們寫到書上。把本書當成一個練習冊或者速寫本。(當然,你也可以使用自己的速寫本。)

最後我建議,你要花一半的時間在不用電腦的時候閱讀本書,另一半時間則是坐在計算機旁,實踐本書中的示例。

我應該如何閱讀本書

最好是按照章節順序閱讀。第9章之後,你就可以輕松地随便翻看本書了,但是前面幾章,建議你按照順序來讀。

本書按照先後順序教你程式設計。更進階的閱讀方式則是:根據自己的需要跳讀,将本書作為一個參考文檔來使用。本書的前一半内容都是首先講解一個示例,然後一步一步分解這個示例中所涵蓋的知識點。除此以外,計算機程式設計的基本原理是按照一個特定的順序來逐漸呈現的,這個順序是多年來在紐約大學帝勢藝術學院的互動電信項目中許多同學反複摸索之後的結果(http://itp.nyu.edu)。

我将本書所有23章内容分為十節課。前面9章介紹了計算機圖形學,涵蓋了計算機程式設計的基本原理。第10~12章則暫停講授新知識,轉向讨論如何用增量方法(incremental approach)建構更加大型的項目。第13~23章繼續拓展基礎知識,并且展示一系列更加進階的話題,涉及3d、直播視訊和資料可視化等。

這些内容分為容易了解的幾個部分。每節課的末尾,我都準備了一個項目,建議你從單純閱讀本書的過程中轉換下思維,嘗試将該節課中的全部内容整合為一個完整的項目。我也為這個項目提供了一些建議,但它們真的僅僅是建議而已。

這是一本教科書嗎

本書既可用作程式設計課程導論的教科書,也可以用來自學。

這裡,我要再次提及:本書的基本結構直接來自于itp的“計算媒體導論”課程。如果沒有同僚和這門課數百名學生的幫助(我多麼希望我可以把他們所有人的名字都寫在這裡),本書是不可能完成的。

坦白講,本書的内容要比針對初學者的一學期課程要多一些。本書共計23章,我曾經在課堂上詳細講過其中18章内容。可是,不論你是否将本書作為課程教材或是自學讀物,你完全可以在幾個月裡消化本書的知識。當然,你也可以讀得更快,但是如果你要在processing中測試本書的代碼,并且完成課後項目,确實是需要一段時間的。那些所謂“10天上10節課就能學會程式設計”的書看似非常吸引人,但實際并不現實。

下面是一個用14周時間學完本書内容的參考計劃。

第1周 第一節課:第1~3章

第2周 第二節課:第4~6章

第3周 第三節課:第7~8章

第4周 第四節課:第9章

第5周 第五節課:第10~11章

第6周 期中!(繼續第五節課:第12章)

第7周 第六節課:第13~14章

第8周 第七節課:第15~16章

第9周 第八節課:第17~19章

第10周 第九節課:第20~21章

第11周 第十節課:第22~23章

第12周 最終項目研讨會

第13周 最終項目研讨會

第14周 最終項目展示

本書有測驗題目嗎

師傅領進門,修行在個人。真正的竅門在于練習,練習,練習。假設你現在是10歲的孩子,在學習小提琴課程,老師肯定會跟你講每天都要練習。同理,要完成本書提供的練習,如果可能的話每天都要練習。

作為初學者,在學習的過程中,一開始可能并不會提出自己的想法,而這也就是那些練習存在的目的。不過,如果你有自己開發項目的想法,那就跳過練習,嘗試去實作它。

大多數練習都是小的演練,幾分鐘就能完成。有一些則會稍難,可能需要一小時才能完成。在整個學習過程中,有時候可能要暫停學習新知識,花上幾小時、一天甚至一周時間來完成一個項目,這也會讓你收益頗豐。正如我之前提到的,這就是我這樣安排課程結構的用意。我建議你在每節課結束後,暫停閱讀,自己用processing做一些小項目、小練習。本書每節課後面都提供給你項目的建議。

本書所有練習的答案都可以在其配套網站上找到。

本書有配套網站嗎

本書的網址是:http://learningprocessing.com。

網站上提供了以下内容:

本書所有練習的答案

本書所有代碼的可下載下傳版本

本書所有内容的配套教學視訊

書中示例的線上版本(通過p5.js運作)

本書額外的提示和教程

問題以及評論

本書中的許多示例原本是彩色的,并且具有動态特效,是以書中的黑白和靜态螢幕截圖無法描繪示例的全部效果。當你閱讀時,你可以通過浏覽器(使用p5.js)檢視線上示例,或者下載下傳到你的電腦上在本地運作。

本書中示例的源代碼同樣可以在learning processing github庫(https://github.com/shiffman/learningprocessing/)上找到。我還使用了github issues(https://github.com/shiffman/learning-processing/issues)作為系統工具來發現本書中錯誤,是以如果你發現本書中有任何錯誤,請在那裡給予回報。你有可能會在本書示例和線上示例之間發現些許差别,但是它們的核心概念是相同的。(例如,為了适合本書的排版布局,書中的示例是以200×200的像素大小呈現的,而線上示例的尺寸可能會相對大一些。)

本書的配套網站并不能取代processing官方網站http://processing.org。官方網站提供了processing參考文檔和更多的示例,此外,還有一個活躍的論壇。

一步一個腳印

增量開發的理念

在你開始學習程式設計之前,還有一個方法需要和你讨論一下。它是我學習程式設計的一個重要驅動力,并且也對本書的編寫風格産生了巨大影響。這個方法是由我之前的一個教授提出來的,叫做“增量開發的理念”(philosophy of incremental development)。更通俗地講,就是“一步一個腳印的方法”(one-step-at-a-time approach)。

無論你是一個新手還是具有幾年程式設計經驗的程式員,當你面對任何一個程式設計項目時,千萬不要落入畢其功于一役的陷阱中去。比如,你的目标可能是建立一個這樣的processing程式:使用perlin噪聲按照順序為3d頂點圖形生成貼圖。這個圖形可以通過神經網絡中的人工智能技術實作自行演化。然後通過基于web的資料挖掘抓取每天的新聞和故事,而這些故事内容的字型顔色使用者可以語音控制。

擁有一個宏大的願景并沒有錯,但是對你來說很重要的一點是:學會如何将這個願景分解為幾個小的部分然後各個擊破。前面的例子有一點荒謬,如果你嘗試一次性将那個願景實作出來,我敢保證你最終不得不用冷敷法治療你的頭痛。

為了進行示範,讓我們簡化一下,假設你希望編寫遊戲《space invaders》(詳見http://en.wikipedia.org/wiki/space_invaders)。注意,盡管本書并不是一本遊戲程式設計書,但本書可以傳授給你遊戲程式設計的基本方法。遵循前面介紹的理念,你應該已經知道每一次隻編寫一部分内容,這就要把編寫《space invaders》分解為幾個部分。下面是我的快速嘗試:

1.編寫宇宙飛船的程式。

2.編寫入侵者的程式。

3.編寫記分系統的程式。

這裡我将程式分為3步!我并沒有嘗試一次性地解決這個問題。關鍵就在于将問題分解為盡可能小的部分,有必要的話,甚至可以到極端的地步。畢竟,如果要編寫一個諸如《space invaders》這樣複雜的遊戲程式,将其分解為幾個相對容易上手的部分,就不會覺得那麼不知所措。

請牢記以上内容,接下來我開始着手稍微複雜一點的工作,将第1步分解為更小的部分。在這裡我打算編寫6個子程式,第一個也是最簡單的:顯示一個三角形。後面每一步我都會進行小小的改進:移動三角形。随着程式變得愈加複雜,最終我就能夠完成整個程式的編寫。

a.在螢幕上繪制一個三角形。這個三角形将會成為宇宙飛船。

b.将三角形置于螢幕的底端。

c.将三角形置于它之前位置的偏右一側。

d.将三角形變為動态圖形,使得它從左側移動到右側。

e.僅當按向右的方向鍵時,三角形才會從左側移動到右側。

f.當點選向左的方向鍵時,三角形從右側移動到左側。

當然,這些僅僅是整個《space invaders》遊戲需要的所有步驟當中的一小部分,但是這闡述了一種重要的思維方式。這種思維方式不但使程式設計更加容易,而且使得調試(debugging)更加友善。

排除故障指的是發現電腦程式中的故障問題并且修複它們,使得程式正常運轉的過程。我想你之前曾經聽說過故障(bug)這個名詞,比如windows作業系統在代碼深處偶爾會出現微小而奇怪的錯誤。對于我們來說,故障是一個更加簡單的概念:錯誤。當你嘗試編寫某個東西時,很有可能程式并不完全如我們所願地執行,甚至完全不會。是以說,如果你一開始就把所有内容一次性編寫完畢,就很難找到這些故障所在。一步一個腳印的方法則允許你每次處理一個故障。

除此以外,增量開發(incremental development)也非常适合面向對象程式設計(object-oriented programming)方法,這是本書的核心原則。對象(object)這一概念将會在本書第8章進行介紹,它将有助于你以子產品化的方式開發項目,同時也為建構和分享代碼提供了一個很好的方法。可複用性(reusability)也非常關鍵。例如,如果你已經為《space invaders》遊戲編寫了一個宇宙飛船的程式,現在想讓該程式在行星遊戲上運作,你可以抓取你需要的部分(也就是宇宙飛船部分的代碼),在新的程式中圍繞該部分繼續進行開發。

算法

歸根結底,計算機程式設計實際是編寫算法。算法(algorithm)是用于解決一個特定問題的一系列有序指令。增量開發(對于你來說,本質上是一種算法)的理念就使得編寫一個用于實作你想法的算法更加容易。

開始學習第1章之前,作為一個練習,嘗試去寫一個關于你每天都會做的事情的算法,比如刷牙。盡量使這些指令看上去非常直白、簡單。(比如:将牙刷往左邊移動1厘米。)

設想下你需要為一個完全不熟悉牙刷、牙膏以及牙齒的人提供一個完整的指令幫助他完成刷牙任務。這其實就是編寫程式了。計算機隻不過是一個善于遵循精确指令的智能機器,它并不能了解這個世界。接下來,你就要以一個程式員的身份開始你的旅程、你的故事和你的新生活。你将學習如何與你的計算機朋友交談。

練習i-1入門練習:編寫刷牙指令。

一些建議:

你是否會基于不同的條件做不同的事情?在你的指令中是否會使用詞語“如果”(if)和“否則”(otherwise)?(例如:如果水非常涼,那麼加入溫水;否則,加入涼水。)

在你的指令中使用單詞“重複”。例如:上下移動牙刷。重複五次。

同樣,注意我是從第0步開始的。在程式設計過程中,通常是從0開始算起的,是以最好從現在就養成習慣!

如何刷牙

第0步:

第1步:

第2步:

第3步:

第4步:

第5步:

第6步:

第7步:

第8步:

第9步:

<b>目 錄</b>

第一節課 開始

第1章 像素

<a href="https://yq.aliyun.com/articles/83003/" target="_blank">1.1 坐标紙</a>

<a href="https://yq.aliyun.com/articles/83013/" target="_blank">1.2 繪制基本圖形</a>

<a href="https://yq.aliyun.com/articles/83015/" target="_blank">1.3 灰階模式</a>

<a href="https://yq.aliyun.com/articles/83029/" target="_blank">1.4 rgb顔色</a>

<a href="https://yq.aliyun.com/articles/83033/" target="_blank">1.5 顔色透明度</a>

<a href="https://yq.aliyun.com/articles/83036/" target="_blank">1.6 自定義顔色取值範圍</a>

第2章 processing

<a href="https://yq.aliyun.com/articles/83041/" target="_blank">2.1 讓processing來拯救你</a>

<a href="https://yq.aliyun.com/articles/83043/" target="_blank">2.2 如何下載下傳processing</a>

<a href="https://yq.aliyun.com/articles/83046" target="_blank">2.3 processing應用程式</a>

<a href="https://yq.aliyun.com/articles/83048/" target="_blank">2.4 速寫本</a>

<a href="https://yq.aliyun.com/articles/83050/" target="_blank">2.5 processing中的代碼</a>

<a href="https://yq.aliyun.com/articles/83053/" target="_blank">2.6 錯誤提示</a>

<a href="https://yq.aliyun.com/articles/83055/" target="_blank">2.7 processing參考文檔</a>

<a href="https://yq.aliyun.com/articles/83057/" target="_blank">2.8 “運作”按鈕</a>

<a href="https://yq.aliyun.com/articles/83060/" target="_blank">2.9 你的第一個草圖</a>

第3章 互動

<a href="https://yq.aliyun.com/articles/83063/" target="_blank">3.1 程式的運作流程</a>

<a href="https://yq.aliyun.com/articles/83068/" target="_blank">3.2 我們的好朋友:setup()和draw()</a>

<a href="https://yq.aliyun.com/articles/83073/" target="_blank">3.3 跟随滑鼠移動</a>

<a href="https://yq.aliyun.com/articles/83076" target="_blank">3.4 滑鼠點選和鍵盤操</a>

第4章 變量36

4.1 什麼是變量36

4.2 變量的聲明和初始化37

4.3 使用變量39

4.4 多種變量42

4.5 系統變量43

4.6 随機:多樣化為生活增加趣味性44

4.7 使用變量來建立zoog46

4.8 坐标平移48

第5章 條件語句50

5.1 布爾表達式50

5.2 條件語句:if、else、else if51

5.3 草圖中的條件語句54

5.4 邏輯運算符56

5.5 多個滑鼠翻轉效果的實作58

5.6 布爾變量59

5.7 彈力球62

5.8 實體學基礎66

第6章 循環69

6.1 什麼是疊代69

6.2 while循環:你唯一真正需要的循環71

6.3 “退出”條件73

6.4 for循環75

6.5 局域變量與全局變量77

6.6 draw()循環内部的循環80

6.7 長出胳膊的zoog82

第二節課的項目84

第三節課 結構化

第7章 函數86

7.1 将代碼分解86

7.2 使用者自定義函數87

7.3 定義函數88

7.4 簡單的子產品化89

7.5 實參91

7.6 傳遞副本95

7.7 傳回類型97

7.8 重新整理zoog100

第8章 對象103

8.1 掌握面向對象程式設計103

8.2 使用對象104

8.3 編寫餅幹模具的程式105

8.4 使用一個對象的具體步驟107

8.5 使用标簽進行組合109

8.6 構造函數參數112

8.7 對象也是資料類型115

8.8 面向對象的zoog116

第三節課的項目119

第四節課 重複性

第9章 數組122

9.1 數組的作用122

9.2 數組是什麼124

9.3 聲明和建立數組125

9.4 初始化數組126

9.5 數組運算127

9.6 簡單的數組示例:蛇129

9.7 對象數組131

9.8 互動式對象133

9.9 processing的數組函數136

9.10 1001個zoog137

第四節課的項目139

第五節課 融會貫通

第10章 算法142

10.1 我們現在在哪裡?我們将要去哪裡142

10.2 算法:跟着你自己的節奏跳舞143

10.3 從概念到部分144

10.4 第1部分:雨水采集器145

10.5 第2部分:相交147

10.6 第3部分:計時器152

10.7 第4部分:雨滴154

10.8 整合157

10.9 為下一步做好準備164

第五節課的項目165

第11章 調試166

11.1 建議1:休息一下166

11.2 建議2:讓另外一個人參與進來166

11.3 建議3:簡化167

11.4 建議4:println()是你的朋友168

第12章 庫171

12.1 庫概述171

12.2 内置庫172

12.3 第三方庫172

12.4 手動安裝庫173

第六節課 你周圍的世界

第13章 數學176

13.1 數學和程式設計176

13.2 模數177

13.3 随機數178

13.4 機率回顧179

13.5 代碼中的事件機率179

13.6 perlin噪聲181

13.7 map()函數184

13.8 角度185

13.9 三角學186

13.10 振蕩188

13.11 遞歸190

13.12 二維數組193

第14章 三維平移和旋轉198

14.1 z坐标軸198

14.2 p3d究竟是什麼202

14.3 頂點形狀203

14.4 自定義三維圖形205

14.5 簡單的旋轉207

14.6 圍繞不同的軸旋轉209

14.7 scale()函數211

14.8 pushmatrix()和popmatrix()函數212

14.9 用processing模拟太陽系218

14.10 pshape類220

第六節課的項目222

第七節課 顯微鏡下的像素

第15章 圖像224

15.1 圖像入門224

15.2 圖像的動畫效果226

15.3 我的第一個圖像處理濾鏡228

15.4 圖像數組229

15.5 像素,像素,更多的像素231

15.6 圖像處理簡介235

15.7 另外一個圖像處理濾鏡:制作屬于你自己的tint()函數236

15.8 寫入另外一個pimage對象的像素237

15.9 第二階段:像素組處理239

15.10 具有創意的可視化242

第16章 視訊244

16.1 視訊直播244

16.2 已錄制的視訊249

16.3 軟體鏡像251

16.4 視訊作為傳感器和計算機視覺256

16.5 背景消除260

16.6 運動檢測263

16.7 計算機視覺庫266

第七節課的項目267

第八節課 外面的世界

第17章 文本270

17.1 字元串從哪來270

17.2 什麼是字元串271

17.3 顯示文字273

17.4 文字的動态效果275

17.5 文字馬賽克278

17.6 旋轉文字280

17.7 按字元逐一顯示文字281

第18章 資料輸入286

18.1 字元串的操作286

18.2 拆分群組合288

18.3 處理資料290

18.4 處理文本檔案291

18.5 表格資料293

18.6 非标準化格式的資料297

18.7 文本分析302

18.8 xml305

18.9 使用processing的xml類307

18.10 json312

18.11 jsonobject和jsonarray315

18.12 線程318

18.13 api320

第19章 資料流323

19.1 網絡通信323

19.2 建立伺服器324

19.3 建立用戶端327

19.4 廣播329

19.5 多使用者通信,第1部分:伺服器331

19.6 多使用者通信,第2部分:用戶端333

19.7 多使用者通信,第3部分:組合335

19.8 串行通信336

19.9 使用信号交換的串行通信338

19.10 使用字元串的串行通信339

第八節課的項目342

第九節課 制造噪音

第20章 聲音344

20.1 基礎的聲音播放344

20.2 關于聲音播放的更多内容348

20.3 聲音合成350

20.4 聲音分析353

20.5 聲音門檻值355

20.6 頻譜分析358

第21章 導出361

21.1 導出至web361

21.2 獨立的應用程式362

21.3 高分辨pdf檔案363

21.4 圖像和saveframe()367

21.5 錄制視訊367

第九節課的項目370

第十節課 超越processing

第22章 進階的面向對象程式設計372

22.1 封裝372

22.2 繼承374

22.3 一個繼承的示例:圖形378

22.4 多态性381

22.5 重載384

第23章 java386

23.1 揭開processing魔法386

23.2 如果不使用processing,代碼看上去會是什麼樣子387

23.3 探索java api389

23.4 其他有用的java類:arraylist390

23.5 其他有用的java類:rectangle396

23.6 異常(錯誤)處理398

23.7 processing之外的java400

附錄a 常見錯誤402