在Processing中,最經常使用也是最多見的當屬點,線,圓等的座標了,那麼先從座標講起。目前使用最普遍的度量體系就屬笛卡爾座標系統了。笛卡爾數學由著名的法國哲學家、物理學家、生理學家、數學家勒奈·笛卡爾(1596-1650)發明,並以他的名字命名。笛卡爾不只創立了解析幾何,將當時徹底分離的代數學和幾何學聯繫到了一塊兒,還在回答「怎樣判斷某件事物是真的?」這個哲學問題上邁出了一大步。工具
你們看下圖:oop
void setup() { size(640, 360); noStroke(); noLoop(); } void draw() { drawCircle(width/2, 280, 6); } void drawCircle(int x, int radius, int level) { float tt = 126 * level/4.0; fill(tt); ellipse(x, height/2, radius*2, radius*2); if(level > 1) { level = level - 1; drawCircle(x - radius/2, radius/2, level); drawCircle(x + radius/2, radius/2, level); } }
經過了簡短的代碼,繪製了不少對稱呈灰度顯示的大圓和小圓。經過在draw()方法中調用drawCircle()這個畫圓的工具,咱們輕鬆地生產出他們。不知道你們有沒有發現,我能夠將兩個同級對稱的圓用座標軸進行分割,那麼兩個圓就是相對於y軸鏡面對稱,每兩個同級圓其實就是共享一個座標系統。那麼其實我這裏就是繪製了31個嵌套的座標系統(除最外面的大圓)。spa
再以下圖:
code
一上來你們可能看的不是太明白。這是什麼呀?可能有些人會發問。其實這是三張頻譜圖。用來分別映射咱們鼠標的動做:最上面那張是表示鼠標在x軸上的運動狀況,中間那幅表示鼠標在y軸上的運動狀況,而最下面那張表示鼠標點擊這個動做的發生和延遲狀況。ip
下面是他的代碼實現:數學
int[] xvals; int[] yvals; int[] bvals; void setup() { size(640, 360); noSmooth(); xvals = new int[width]; yvals = new int[width]; bvals = new int[width]; } int arrayindex = 0; void draw() { background(102); for(int i = 1; i < width; i++) { xvals[i-1] = xvals[i]; yvals[i-1] = yvals[i]; bvals[i-1] = bvals[i]; } // Add the new values to the end of the array xvals[width-1] = mouseX; yvals[width-1] = mouseY; if(mousePressed) { bvals[width-1] = 0; } else { bvals[width-1] = 255; } fill(255); noStroke(); rect(0, height/3, width, height/3+1); for(int i=1; i<width; i++) { stroke(255); point(i, xvals[i]/3); stroke(0); point(i, height/3+yvals[i]/3); stroke(255); line(i, 2*height/3+bvals[i]/3, i, (2*height/3+bvals[i-1]/3)); } }
不知道你們有沒有發現,前面兩張圖很像咱們中學時代學的正弦與餘弦曲線。上面的白色平行線和中間那條黑色平行線就是他們分別對應的x軸,神奇吧。若是你鼠標移動的越快,這些曲線的幅寬則越小。一樣道理,若是你停留在鼠標上的時間越長,那麼當你點擊以後移開鼠標以前產生的直方圖的跨度則越大。
class
這些都是幾何學中座標軸的妙用,經過座標軸的變換咱們還能夠得出不少不少有趣的2D和3D圖形。你們還不趕快開動腦筋和雙手來創造他們吧。sed
這一節就先講到這裏,歡迎關注本連載博文《幾何之美》的下一篇。謝謝你們!float