[Processing](https://processing.org/) === >歡迎大家來到Processing的世界 >希望你們能透過它去認識程式語言[color=#9999ff] > >課程開始前,若沒有上課投影片請先下載 > [完整版點我下載~](https://drive.google.com/open?id=0B-n3P_HMVQP8eGdkMG5WNTY0OUE) [學生版點我下載~](https://drive.google.com/open?id=0B37wkuhaxhaLODZYMW55VUNKMms) --- # Hello Processing 通常接觸一個全新的程式語言 都會先從印出" Hello World "這串字開始! ---- ### Syntax(語法) 使用函式 println("想印的字串") 輸入 Hello, Processing 。 ```clike= println("Hello, Processing"); ``` ### Consequence(結果) 將程式編譯過後, Message area(黑色區域)就可以看到你輸入的東西被印出來 Hello, Processing >參考閱讀 : [println()](https://processing.org/reference/println_.html) --- # 給我一個圓 Processing的開發者Casey Reas和Ben Fry曾在他們的書裡提到: "*Processing is for writing software to make images, animations, and interactions* " 因此如何使用Procesing實做出一個圓形在螢幕上面 可以說是入門必須的課題之一 ---- ## 要求 * 印出一個圓形 * 要有背景色 * 圓也要有某種顏色 ---- ## size() 使用size()決定sketch(畫布)的大小 預設的畫布大小是 100*100 pixels ### Syntax(語法) ``` size(width, height) //for 2D graph size(width, height, renderer) //for 2D or 3D graph ``` ### Consequence(結果) 製造出一個指定寬高的畫布 ![](https://i.imgur.com/lpLEtbW.png) >參考閱讀 : [size()](https://processing.org/reference/size_.html) ---- ## background() 設置畫布的背景色 ### Syntax(語法) 僅介紹兩種會用到的語法 詳細語法請看下方"參考閱讀" ``` background(v1, v2, v3) background(rgb) ``` >名詞解釋: v1 : 大小為0~255之間的某一數字;紅色的強度 。 v2 : 大小為0~255之間的某一數字;綠色的強度。 v3 : 大小為0~255之間的某一數字;藍色的強度。 rgb: 以#後接六位大小為0~F的十六進位數字組成。 ### Consequence(結果) ```javascript= background(255, 204, 0); ``` ![](https://i.imgur.com/3JtMAzp.png) ```javascript= background(#FFCC00); ``` ![](https://i.imgur.com/3JtMAzp.png) 兩張圖其實是一樣顏色的:FF~16~ = 255, CC~16~ = 204, 00~16~ = 0。 >參考閱讀 : [background()](https://processing.org/reference/background_.html) ---- ## ellipse() 畫橢圓的函式 ### Syntax(語法) ``` ellipse(橢圓中心的x軸位置, 橢圓中心的y軸位置, 橢圓的寬, 橢圓的高) ``` ### Consequence(結果) ```javascript= ellipse(50, 100, 50, 80); ``` ![](https://i.imgur.com/tCVu14p.png) >參考閱讀 : [ellipse()](https://processing.org/reference/ellipse_.html) ---- ## fill() 設置圖形的顏色 ### Syntax(語法) 和background()類似 只介紹其中兩種用法 ``` fill(v1, v2, v3) fill(rgb) ``` ### Consequence(結果) ```javascript= fill(204, 102, 0); ``` ![](https://i.imgur.com/XZH5Rkp.png) ```javascript= fill(#CC6600); ``` ![](https://i.imgur.com/XZH5Rkp.png) 兩張圖其實是一樣顏色的:CC~16~ = 204, 66~16~ = 102, 00~16~ = 0。 >參考閱讀 : [fill()](https://processing.org/reference/fill_.html) ---- ## 實作 * ### 上課內容補充 + **顏色**: 除了RGB模式,其實還有另一個HSB模式可以用,但因為RGB會比較好理解和操作,[HSB模式](https://processing.org/reference/colorMode_.html)相關內容請自行摸索。 + **圖形邊框**: [noStroke()](https://processing.org/reference/noStroke_.html)函式可以讓圖形的邊框消失,而[stroke(color)](https://processing.org/reference/stroke_.html)函式則可改變邊框顏色,使用方法同background()和fill(),然後利用[strokeWeight(number)](https://processing.org/reference/strokeWeight_.html)函式可以改變邊框寬度,相關內容請自行摸索。 + 更多內容請見課程投影片 > 給我一個圓-程式碼 [點我下載~](https://github.com/Raxwade/Processing-Tutorial/blob/master/GiveMeCircle.pde) >[何謂RGB、CMYK、HSB色彩模型?](https://support.corel.com/hc/zh-tw/articles/216193008--%E5%85%B6%E4%BB%96-%E4%BD%95%E8%AC%82RGB-CMYK-HSB%E8%89%B2%E5%BD%A9%E6%A8%A1%E5%9E%8B-) # 讓圓動起來 + ## 上課內容補充 - press的型別可以從[**int**](https://processing.org/reference/int.html)改成[**boolean**](https://processing.org/reference/boolean.html)。 - [mousePressed()](https://processing.org/reference/mousePressed_.html)的函式可以改成使用boolean type的[mousePressed變數](https://processing.org/reference/mousePressed.html) - 除了圓形之外,Processing其實也有其他的2D圖形可以畫,例如[三角形](https://processing.org/reference/triangle_.html)、[矩形](https://processing.org/reference/rect_.html)。因講課時間有限,所以投影片是用圓形當範例,如果再深入一點,甚至可以用[createShape()](https://processing.org/reference/createShape_.html)的方式去畫圖,有興趣請自行探索。 - 更多內容請見課程投影片 >讓圓動起來-程式碼 [點我下載~](https://github.com/Raxwade/Processing-Tutorial/blob/master/CircleMoving.pde) /*網址失效 --- # 有球必應 提供一些小技巧 * 可能有些同學會困惑circle_size的意思,在我們提供的程式碼中,**circle_size指的是圓的直徑**,這部分如果同學不滿意,也可自行修改。 * **[width](https://processing.org/reference/height.html)、[height](https://processing.org/reference/width.html)可以當作儲存畫布大小的變數。** 舉例來說: 現在有一個size(400, 300)的畫布 那麼你如果想要判斷某個變數X的值會不會超過畫布的寬(400) 相比於if(X>400), 假如這個X代表的是橫軸座標,你也可以用if(X>width)去表示。 在Debug或合作開發時比較一目了然。 * **善用邏輯運算符號** 在我提供的code(程式碼)中,只有兩個if結構。 如果曾經學習過程式語言,只要善用 "**||**"、"**&&**",做這個題目應該不會有太大的問題。 但對**新手**來說,可能會覺得兩個if不夠,如果你有這樣的想法,建議瀏覽講義下方**if-else語法**的內容,如果還是不懂,請直接去詢問你的助教,或上網搜尋資料等等。 > 有球必應-程式碼(未完成) [下載](https://github.com/Raxwade/Processing-Tutorial/blob/BALL-COLLIDING-STUDENT/BallColliding_StudentVersion.pde) --- # 基本概念與通用語法簡介 >這裡介紹的語法不只能在Processing裡使用 >也可以在其他主流的程式語言裡使用,如C++,C#等語言 ## 變數 變數是在撰寫程式時一個相當重要的元素,用來儲存資料,而每一個變數代表的是一個記憶體位址,**當我們去更改一個變數的值時,其實就是更改該記憶體位址所儲存的資料**。 ### 宣告變數的規則: + **只能使用英文字母、底線及阿拉伯數字,且開頭不可為數字**(變數不可包含空格)。 + **儘量避免無意義的變數**,避免在程式碼長、變數多的情況下忘記變數代表的意義。 + **變數前面一定要有資料型別**,因為倘若沒有資料型別,則電腦將不知以何種形式將資料儲存起來。 + **大小寫不同則為不同變數** 如SHE,shE,She為不同的變數。 ---- ## 基本資料型態 + int :即整數(*integer*),一般用來儲存**32位元**沒有小數點的有號整數。 + float:浮點數(*floating number*),一般用來儲存**32位元**有小數點的有號數。 + double:倍精度浮點數,也是儲存有小數點的數字,與float的差別在於double可以存更多位數(**64位元**)。 + char : 此種資料型態是用來儲存「字元(*character*)」,對資訊工程而言是相當重要的資料型別,然而在這次Processing的教學中並不會用到,同學若是有興趣,可以自行搜尋相關資料。 若以上面三種數字資料型態儲存圓周率,那麼int所儲存的資料便是3,而float則會存入3.14159,double則是3.1415926258...... ```clike= int Pi_int = 3; float Pi_float = 3.14159; double Pi_double = 3.1415926258‧‧‧‧‧‧9; char example = 's'; //println(example) will show "s" in the message area ``` >以上數據僅是示意,讓各位同學更清楚float與double的差別。 [更多與資料型別相關內容(外部網站)](http://programming.im.ncnu.edu.tw/Chapter5.htm) ---- ## if-else 語法 >***如果...就...不然的話就...*** >當於不同情況時 做不同的事時,就需要這樣的語法 + 語法一: ```clike= if(條件判斷) { //要做的事 } ``` 此語法的意思如下: 倘若**if後面()裡的條件成立**那麼就會執行其**大括號{}裡的程式碼**,但如果條件不成立,程式就會直接跳過那個大括號繼續往下執行。 + 語法二 ```clike= if(條件判斷) { //要做的事1 } else { //要做的事2 } ``` 此語法if的部分與語法一相同,不同的部分在於,如果if()裡的條件不成立,則程式就會執行else後面大括號裡的程式碼( ***注意!! 如果if()裡的條件成立,則不會執行else後面大括號裡的程式碼!!*** ) + 語法三 ```clike= if(條件判斷1) { //要做的事1 } else if(條件判斷2) { //要做的事2 } else { //要做的事3 } ``` 語法三與前面的兩個語法並沒有什麼差別,**條件1**滿足時執行**要做的事1**,**條件2**滿足時執行**要做的事2**,兩者都不滿足時則執行**要做的事3**。 當我有**更多條件時,我可以再插入一些 else if(條件x)** 來滿足我的需求,所以不管有多少種狀況,都是可以用這個語法完成的。 或許會有一些同學感到疑惑,接在if後面的括號裡的條件判斷到底是什麼東西呢? 我們先來了解一些符號([關係運算子、邏輯運算子](http://www.kaiching.org/2010/06/c-operator.html#3))所代表的意義。 ![](https://i.imgur.com/JcU8pl5.png) 這些符號都可以用來描述所謂的條件,而if-else語法則是使程式在滿足特定條件的情況下執行特定的行為,圖中可以看到部分符號與數學是相同的,在此就不做贅述,以下會介紹圖中不常使用的符號 + 等於 - 在程式語言中,**單一個等號的意義為指定(assign)**,即把等號右邊的資料存到等號左邊的東西(通常為變數)。因此邏輯上的等於(如數字大小一樣)則用兩個等號作為語法,假設有兩個整數a,b ```clike= if(a==b) { //要做的事 } ``` 當a與b相等時,才會執行裡面的程式碼。 + 且 - 「&&」是邏輯上的且,其左右分別是不同的條件,**兩個條件都要滿足**,才會執行,以if()語法為例,假設有兩個int(整數) a,b ```clike= if( a==1 && b==5 ) { //要做的事 } ``` 只有a是1,而且b是5這兩件事 ***同時發生*** 的時候才會執行裡面的程式碼。 + 或 - 「||」是邏輯上的或(按住鍵盤上的 "**shift**" 和"**enter上面的斜線**"就可以打出此符號),其左右也是兩個不同的條件,然而與「且」不同的是,只要**其中一個條件滿足**,就會執行,以if()語法為例,假設有兩個int(整數)a,b ```clike= if( a==1 || b==5) { //要做的事 } ``` 「a是1」或「b是5」只要其中一個條件滿足就會執行裡面的程式碼。 ---- ## 重複 >有些時候我們希望程式可以"**重複**"做一件事 >而for迴圈與while迴圈兩種語法可以幫我們處理這件事 >以下將介紹這兩個語法 ### for迴圈 for迴圈語法如下: for(起始條件;執行條件;條件更新) { //要重複做的事 } 光看這樣的寫法同學們可能不太好理解,以下附上一些簡單的程式碼: ```clike= int i; for(i=0;i<10;i++) { //要重複做的事 } ``` + i=0 「i=0」即是所謂的起始條件,也就是說程式第一次執行到這行時會將i設為1。 + i<10 「i<10」為執行條件,意思是每當程式執行到for()這行時,若i<10時就會進入此迴圈執行裡面的程式碼。 + i++ 「i++」即是條件更新,也就是當程式碼執行至for()這行時i會存入i+1,ex:當i為0時,執行到這條程式碼時,i就會更新為1(各位同學要小心" + + i " 跟" i + + "是不同的語法!!)。 所以這串程式碼在執行到for()時可以這樣解釋: + 第一輪: i初始化為0,接著比較條件,倘若i<10,則進入迴圈執行程式碼,並且將i加上1,否則跳出迴圈。 + 第二輪: 此時i為1(上一輪+1),接著與執行條件做比對,然後再加上1。 以此類推,所以這個迴圈在i到10以後就會結束,而且i是從0開始,也就是說當i為0,1,2,......,9時都會執行,所以這串執行碼一共會執行10次。 ---- ### while迴圈 >語法簡單 >不知道要重複幾次時使用 >初學者觀念若不好容易出錯 while迴圈的語法跟for迴圈相比簡單許多,前面我們學過的for迴圈有一個執行條件,與條件更新,所以這個for迴圈會執行幾次在我們撰寫的當下就已經了解了,但有時候我們並不確定要重複幾次,這個時候就可以使用while語法。 ```clke= while(終止條件) { //要重複做的事 } ``` 在滿足條件以前會重複執行,***直到滿足條件為止***,所以在**要重複做的事**裡應該要包含**條件更新**,以避免陷入死迴圈,倘若各位將來還有寫程式的機會,請謹記這點。 ## [Photocap(修圖軟體)換頭](https://hackmd.io/OwRgJgzAnGCmAsBaEBWAbAJkfEBjYiARgGZhiJi64oAcVGGIsAhkA===#)