提起「編程」二字,很多人腦中會覺得高端、燒腦、難學,WENZY– 希望通過這個系列指南,掃除大家對“編程”的刻板影響,一路玩轉(zhuǎn)編程。這不僅僅適合設(shè)計師閱讀,相信任何一個想了解編程的人都能通過它迅速入門。
設(shè)計師可以說是靈感泛濫的物種之一,腦袋里往往裝著各式天馬行空的想法。通過學習繪畫,我們就比常人多了一種洞察事物本質(zhì)的能力。
這種能力讓我們對造型和色彩更加敏感,可以輕易地看見常人忽略的細節(jié),可以捕捉日常生活中精彩的畫面瞬間。
可是,僅僅用畫筆和繪圖軟件來展示自己腦中的構(gòu)想還是有些局限。你應(yīng)該多掌握一門魔法般的技能,那就是編程。
它可以讓你從另一個維度認識世界,不再是感觀層面,而是回歸到圖像的源頭——數(shù)據(jù)。
你可以最直觀地了解圖像的生成原理,是什么構(gòu)成了色彩?又是什么產(chǎn)生了造型?各種圖形處理的過程,數(shù)據(jù)發(fā)生了哪些變化?
在深入接觸的過程中,你還可以了解萬事萬物的運行原理,創(chuàng)造各種粒子系統(tǒng),模擬各種自然現(xiàn)象。
在程序世界中,你就是造物主。想盡快體驗這種創(chuàng)造的快感?那趕緊往下看吧~~我已經(jīng)迫不及待想向你展示程序之美了。
編程到底是什么?它的最終目的,就是讓計算機解決某個問題。如果我們想讓計算機理解指令,就得掌握編程語言。
編程語言還不止一種,它有自身的一個演化過程——機器語言,匯編語言,再到高級語言。語言的發(fā)展,其實是由一批批懶人做出的貢獻。正如FORTRAN的設(shè)計者John Backus所言:我的大部分成果源自我的懶惰。因為我不喜歡寫程序,所以我設(shè)計出了能輕松編寫程序的系統(tǒng)。
在這樣一批懶人的推動下,語言就越變越“高級”,也越來越接近人話(自然語言)。未來肯定會存在這樣一個場景,你只需要向計算機描述一個問題,它便能瞬間理解你的意思,自動生成程序并迅速解決。
想象很美好,但在有生之年,估計還無法見證這個時刻。所以處于2015的我們,還是需要老老實實學一門編程語言。
在學習的同時,我們也需要向前輩們的偷懶精神致敬。盡量發(fā)揮計算機自身的優(yōu)勢,讓它自動化地解決問題。
編程語言有上百種,在這里,我向你隆重推薦Processing。
它可能不是現(xiàn)階段最主流的,但卻是最適合入門的,特別是設(shè)計師。
優(yōu)點如下:
Processing誕生于鼎鼎大名的MIT MEDIA LAB。它最擅長創(chuàng)作圖像,無論是靜態(tài)或是動態(tài),二維或是三維。既能做游戲,也能寫音樂。
當某一天,你嫌photoshop提供的功能還不夠強大,無法實現(xiàn)自己想要的效果,你完全可以自己寫一個筆刷,寫一個濾鏡,對圖片進行像素級別的操控。
下面的這些作品,就出自Processing之手。
Dave Whyte作品:
在開始之前,我們先到Processing官網(wǎng)下載安裝包( https://processing.org/download/)選擇 No Donation,再點擊download,即可免費下載。
若想支持Processing Foundation,可以考慮適當?shù)鼐栀洝U驗閮晌粍?chuàng)始人有開源的胸襟,才使我們能免費使用到這么棒的工具。
準備工作完畢。我們先動動手。把下面的代碼復(fù)制到程序中。
float angle, a; int circleW;
void setup(){ size(700, 400); circleW = 3; //控制圓形節(jié)點的大小 }
void draw(){ background(0); stroke(255); a = 45; //控制樹形的分叉角度 angle = radians(a); translate(width/2, height); line(0, 0, 0, -120); translate(0, -120); branch(130); }
void branch(float h){ h *= 0.6; if (h > 2){ pushMatrix(); rotate(angle); line(0, 0, 0, -h); ellipse(0, -h, circleW, circleW); translate(0, -h); branch(h); popMatrix(); pushMatrix(); rotate(-angle); line(0, 0, 0, -h); ellipse(0, -h, circleW, circleW); translate(0, -h); branch(h); popMatrix(); } }
接著點擊左上方的三角符號運行試試看。
(*若中文注釋在程序中無法正常顯示,可以在preference-Editor and Console font中,選擇字體Andale Mono)
最終,它會生成這樣的圖案。
這段程序用到了很著名的遞歸函數(shù)。現(xiàn)在看不懂沒有關(guān)系,我們可以試著改變上面的一些數(shù)值,比如將“ a = 45 ”中的“ 45 ”改成“ 90 ”試試。
圖像發(fā)生變化了!
這還不是最酷炫的效果。試著將變量值替換成一個神奇的參數(shù)mouseX(末尾字母大寫),寫成“a = mouseX”。
當你左右移動,圖像就會產(chǎn)生動態(tài)的變化。
有沒有感受到無法言喻的秩序之美?參數(shù)mouseX的作用是實時地獲取鼠標的X坐標。所以只要左右移動鼠標,即可實時地改變數(shù)據(jù),從而改變圖形形狀。
在這個程序中,定義的屏幕寬度是700。所以mouseX的數(shù)值變化范圍就是0到700。鼠標移到最左為零,最右為700。
代碼”a = mouseX”中的a,被稱為變量。這個概念也可以先不去深究,這里的a是用來控制分叉的角度。如果我們覺得這個數(shù)值變化范圍太大了,可以給它除以一個數(shù)值。改成“a=mouseX/10”試試看。此時a的數(shù)值范圍也就變成了0到70。與原來相比,在屏幕上移動同樣的距離,圖形的變化速度就變慢了10倍。
(*與mouseX對應(yīng)的概念,還有mouseY,它代表了鼠標的y坐標。可以替換看看有何不同~~)
最后再給一個例子供大家摸索。
float angle = 0; int num = 20; //控制線條數(shù)量
void setup(){ size(400, 400); //控制屏幕寬,高 colorMode(HSB); }
void draw(){ int c=0; background(25); strokeWeight(3); //控制線條粗細 translate(200, 200); //控制旋轉(zhuǎn)中心的坐標 for(int i=0;i<num;i++){ c += i*1; stroke(c, 255, 200); rotate(PI/30); line(mouseX-width/2, mouseY-height/2, 0, -60); angle += 0.0001; //控制旋轉(zhuǎn)速度 rotate(angle); } }
可以改變”// “號前的數(shù)字參數(shù)試試看。
運行效果:
(“//”是注釋符,寫在它之后的文字不會對程序產(chǎn)生影響,注釋是給寫程序的人看的,方便別人理解代碼。)
從上面的例子,你可以最直觀地感受到,如何通過數(shù)據(jù)操縱圖形。
Processing本身內(nèi)置了很多范例,介紹了各種函數(shù)的基本用法。在菜單欄里選擇 file-excample,從中選擇一些看看。
經(jīng)過一翻折騰后覺得還不過癮?那可以再到openprocessing社區(qū)(http://www.openprocessing.org/,需翻墻)。在這里,你可以看到來自全球創(chuàng)作者的作品,并且代碼是開源!你可以下載并研究這些代碼。
其他資源網(wǎng)站:
有關(guān)processing的體驗就到此為止。
下一節(jié),會正式介紹processing的眾多神奇特性,你將會寫出屬于自己的第一個程序,用數(shù)據(jù)來畫圖。
歡迎關(guān)注作者的微信公眾號:InsLab