- 生成藝術(shù):Processing視覺創(chuàng)意入門
- 華好
- 1788字
- 2021-10-15 18:53:28
1.3 顏色
1.2節(jié)用%運(yùn)算符使橢圓在畫布內(nèi)循環(huán)往復(fù)地運(yùn)動(dòng)。現(xiàn)在我們來(lái)認(rèn)識(shí)一下四個(gè)常見的運(yùn)算符,即加、減、乘、除。在一個(gè)空白的程序內(nèi)寫出以下代碼:

單擊工具欄內(nèi)的播放鍵,底部的控制臺(tái)(console)會(huì)打印出“4”,即1+3的計(jì)算結(jié)果等于4。實(shí)際上這行代碼做了三件事:①做1+3等于4的數(shù)學(xué)計(jì)算;②把答案“4”作為參數(shù)傳遞給print()方法;③print()方法將答案在控制臺(tái)中打印出來(lái)。注意:這行代碼要以分號(hào)結(jié)束。我們?cè)僭囋嚋p法、乘法和除法:

控制臺(tái)會(huì)打印出-22122.3333333。print()打印時(shí)不會(huì)帶空格。為了更清楚地看到結(jié)果,可以將第一行程序改寫為“print(1-3+",");”,控制臺(tái)會(huì)打印出“-2,”,即在數(shù)字后面加了一個(gè)逗號(hào)。我們還可以使用println()方法,這樣每次打印時(shí)都會(huì)換行:

控制臺(tái)會(huì)分四行打印出四個(gè)結(jié)果,但為什么7/3=2?實(shí)際上,當(dāng)除號(hào)“/”兩側(cè)的數(shù)字都是整數(shù)時(shí),Processing會(huì)做整數(shù)除法,即“7除以3等于2余1”。【7/3=2*3+1】
如果不想做整數(shù)除法,需要把數(shù)字寫成小數(shù),如7.0/3、7.0/3.0、7/3.0皆可。對(duì)于Processing來(lái)說(shuō),小數(shù)(float)與整數(shù)(int)截然不同。我們將在2.1節(jié)深入介紹float和int這兩種數(shù)據(jù)類型。對(duì)于數(shù)學(xué)家來(lái)說(shuō),3.0與3是截然不同的。德國(guó)數(shù)學(xué)家利奧波德·克羅內(nèi)克(Leopold Kronecker)曾說(shuō):自然數(shù)是上天給的,小數(shù)則是人造出來(lái)的。

算術(shù)中括號(hào)可以控制運(yùn)算的優(yōu)先級(jí),這對(duì)程序而言同樣適用。譬如,(4+5)×2與4+5×2的結(jié)果不同,但4+5×2與4+(5×2)是一回事。
如何用數(shù)學(xué)方法和代碼來(lái)表示五彩斑斕的顏色呢?這要從彩虹說(shuō)起。日光透過(guò)水汽呈現(xiàn)出連續(xù)變化的顏色。牛頓在實(shí)驗(yàn)室里用三棱鏡把白光分解成連續(xù)的光譜,后來(lái)人們將光譜中的七種顏色(按光的波長(zhǎng)排序)命名為:紅(red)、橙(orange)、黃(yellow)、綠(green)、青(cyan)、藍(lán)(blue)、紫(violet)。每個(gè)人對(duì)顏色的感受與理解會(huì)略有偏差,幸好計(jì)算機(jī)程序可以用數(shù)字來(lái)精確表示顏色。譬如:

上面這個(gè)程序運(yùn)行后,將產(chǎn)生一種有點(diǎn)偏紫的藍(lán)色。這段代碼首先把程序的顏色模式設(shè)為HSB模式,即Hue(色相)、Saturation(飽和度)、Brightness(亮度)。其中,色相正好對(duì)應(yīng)彩虹從紅到紫的光譜,用0~255中的一個(gè)數(shù)字來(lái)指定色相。我們可以移動(dòng)鼠標(biāo)來(lái)產(chǎn)生0~255中的任意一個(gè)數(shù)字,并產(chǎn)生對(duì)應(yīng)的色相:

顯示窗口顏色的色相(Hue)與鼠標(biāo)y坐標(biāo)相關(guān)聯(lián),底部的控制臺(tái)隨時(shí)打印出mouseY值,即色相的值。
frameCount(當(dāng)前幀的序號(hào))與%運(yùn)算符的組合可以動(dòng)態(tài)地展示七彩顏色:

紅色和黃色給人溫暖的感覺,綠色和藍(lán)色則是“冷色”。德國(guó)文豪歌德曾經(jīng)專門研究人對(duì)顏色感知,反對(duì)牛頓單純用數(shù)學(xué)和物理方法對(duì)顏色進(jìn)行分析。計(jì)算機(jī)領(lǐng)域則采用了牛頓的思想,把所有顏色解釋為三原色(紅、綠、藍(lán))之間特定比例的混合。這就是RGB模式:

鼠標(biāo)在左上角時(shí)顯示黑色(紅色、綠色成分都為0),在右上角時(shí)顯示紅色,在左下角時(shí)顯示綠色,在右下角時(shí)顯示黃色(紅色、綠色成分都為255)。由于RGB模式是Processing的默認(rèn)模式,因此“colorMode(RGB);”這行代碼可以省略。

我們可以采用不同的顏色來(lái)繪制不同的物體,譬如:

矩形為青色(R:0, G:255, B:255),圓形為黃色(R:255, G:255, B:0)。在調(diào)用colorMode(RGB)之后,fill(0, 255, 255)括號(hào)內(nèi)的三個(gè)數(shù)值就代表紅色、綠色、藍(lán)色三種顏色的成分。fill()方法用來(lái)指定畫形狀時(shí)填充的顏色。rect(x, y, w, h)是畫矩形的方法:

我們不但可以指定形狀的填充顏色,還可以改變形狀邊緣的顏色:

上述代碼設(shè)置矩形的邊緣為黑色,橢圓的邊緣為紅色,如圖1-4所示。該程序中矩形的左上角總是與鼠標(biāo)對(duì)齊,因?yàn)槌绦蚰J(rèn)的模式是rectMode(CORNER)。在任意一個(gè)程序塊內(nèi)部,代碼是一行一行依次執(zhí)行的,因此第五、六行的stroke()和fill()影響了第七行ellipse()所繪橢圓的顏色,而第八、九行的stroke()與fill()只能影響第十行rect()所繪矩形的顏色。

圖1-4 黑色邊緣的矩形,紅色邊緣的橢圓
在編程時(shí),經(jīng)常需要暫時(shí)刪掉一段代碼,我們一般用一對(duì)/* */來(lái)把一段代碼“注釋掉”,如下面的程序段把矩形暫時(shí)去掉了:

當(dāng)我們?cè)俅涡枰@段代碼時(shí),把/* */符號(hào)刪除即可。
水彩畫中的顏色可以呈現(xiàn)半透明的狀態(tài)。Processing中的顏色也可以,我們只要把fill()、stroke()等方法內(nèi)的三個(gè)參數(shù)變成四個(gè)即可,其中第四個(gè)參數(shù)表示透明度(取值范圍同樣是0~255,0為完全透明,255為不透明)。譬如:

運(yùn)行結(jié)果如圖1-5所示。

圖1-5 半透明的綠色圓形和半透明的橙色正方形
其中,圓形的填充顏色設(shè)置為RGB模式下的fill(0, 255, 0, 100),純綠色結(jié)合了100的透明度之后變成了淺綠色。正方形的填充顏色設(shè)置為HSB模式下的fill(25, 255, 255, 50),橙色結(jié)合了50的透明度之后顯得非常通透。
你也許已經(jīng)發(fā)現(xiàn),background()、stroke()、fill()這幾個(gè)方法的括號(hào)內(nèi)可以有一個(gè)、三個(gè)或四個(gè)參數(shù),如fill(255)、fill(0, 255, 0)、fill(0, 255, 0, 100)。在Processing內(nèi)部,其實(shí)已經(jīng)定義好了三個(gè)不同的版本,它們名稱相同但參數(shù)不同,這稱為方法的重載(overload)。

- Visual C++程序設(shè)計(jì)學(xué)習(xí)筆記
- Learning C# by Developing Games with Unity 2020
- JavaScript 從入門到項(xiàng)目實(shí)踐(超值版)
- 算法精粹:經(jīng)典計(jì)算機(jī)科學(xué)問(wèn)題的Python實(shí)現(xiàn)
- aelf區(qū)塊鏈應(yīng)用架構(gòu)指南
- Expert Android Programming
- Oracle Exadata專家手冊(cè)
- Building RESTful Python Web Services
- Android系統(tǒng)原理及開發(fā)要點(diǎn)詳解
- C#程序設(shè)計(jì)(項(xiàng)目教學(xué)版)
- HTML5+CSS3+jQuery Mobile APP與移動(dòng)網(wǎng)站設(shè)計(jì)從入門到精通
- Arduino Wearable Projects
- ActionScript 3.0從入門到精通(視頻實(shí)戰(zhàn)版)
- App Inventor 2 Essentials
- Xamarin Blueprints