2009年4月19日 星期日

Midterm B9515056

Similiarity

這是用物理的波形公式呈現出來的圖形。
  • y(x,t) = Asin(kx-wt)

A為振幅,w為角頻率,x是波形的水平位移。k為波號設為1就可以了。

波長 λ = (2*π)/w,因此w越小,波長越長。

這個圖是將波長不斷遞增,形成越來越寬的景象。並且遞增x值,讓圖形呈現慢慢右移的現象。
其實這個圖形的構想是來自賦格曲式,原本想讓振幅慢慢變大或產生不規則變形,結果發現這樣圖形會很亂,看不太出Similarity的效果。因此還是維持規律的正絃波形。
void setup(){
size(1024,768);
int w = 1;
int counter = 0;
float a = 40;
for(float j =0;j<height;j+=40){
for(float i =0;i<width;i+=0.1){
ellipse(i*j/10,f(a,w,i,j/40)+j*1.3,j/10,4);
}
}
}

float f(float a, float w,float t,float x){
return a*sin(x-w*t);
}

Gradation
這圖是先做平面方格,由左向右慢慢放大的效果。後來再加上在每個平面方格上,繪製漸漸變小的數個平面方格。平面方格越大,上面的小方格就越多,就會造成這種漸層效果。

void setup(){
size(1000,600);
background(0xffffff);
noStroke();
noLoop();
}
void draw(){
for(int i =1; i<=width; i+=20){
for(int j =1;j<=height;j+=20){ //繪製方格間隔為20px的方格
for(int k =0;k<=i/20;k+=3){ //在每個位置上,多繪製漸層效果的小方格
fill(200-(i%256-k*5),200-(j%256-k*5),200-(i*j%256-k*5),120);
float x = -abs(tan((float)Math.toRadians(j))); //i, j決定漸層偏移角度
float y = -abs(tan((float)Math.toRadians(i)));
rect(i+k*x,j+k*y,i/20-k,i/20-k); //以k做出由大到小的感覺
}
}
}
}

剛剛將偏移函數從cos改成tan,圖形變得很有趣。

沒有留言:

張貼留言