//week05-1-i-love-you
size(300,300);//大小300*300 stroke(255,0,0);//紅色的線條 for(int xx=0;xx<300;xx++){//大的x 0..300 for(int yy=0;yy<300;yy++){//大的y 0..300 float x=(xx-150)/100.0;//減一半 除一百 float y=-(yy-150)/100.0;//減一半 除一百 //0..300變-150..+150 變 -1.5到+1.5 float d = x*x+y*y-1; if(d*d*d-x*x*y*y*y<0) point(xx,yy); } }
//week05-1b-i-love-you size(300,300);//大小300*300 stroke(255,0,0);//紅色的線條 translate(width/2,height/2); for(int xx=-150;xx<150;xx++){//大的x 0..300 for(int yy=-150;yy<150;yy++){//大的y 0..300 float x = xx/100.0;//除100 -1.5..+1.5 float y = - yy/100.0;//除100 -1.5..+1.5 float d = x*x+y*y-1; if(d*d*d-x*x*y*y*y<0) point(xx,yy); } }//week05-2-for-ellipse-arc-arc-radians-360 //角度 degrees度 vs. radians弧度/弳度 size(600,600); background(0); for(int i=0;i<6;i++){ for(int j=0;j<6;j++){ int now = i*6+j;//每個圓的編號 ellipse(50+j*100,50+i*100,80,80); arc(50+j*100,50+i*100,60,60,0,now,PIE); arc(50+j*100,50+i*100,40,40,0,radians(now*10),PIE); text(now,j*100,i*100+30); } }//week05-3-atan-dy-dx-text-radians-degrees //degrees vs. radians 結合 week04-01 和 week05-2 void setup(){ size(400,400); } void draw(){ background(128); line(200,200,400,200); line(200,200,mouseX,mouseY); float dx = mouseX-200,dy = mouseY-200; float a = atan2(dy,dx);//神奇的三角函式 可找到arc弧的radians //atan2()出來的值 介於-PI...+PI中間 textSize(30); arc(200,200,200,200,0,a,PIE);//把算出來的arc radians拿來用 text("radians: "+ a,100,100);//radians弧度/弳度 text("degrees: "+ degrees(a),100,130);//degrees度 }//week05-3b-atan-dy-dx-text-radians-degrees //degrees vs. radians 結合 week04-01 和 week05-2 void setup(){ size(400,400); } void draw(){ background(128); line(200,200,400,200); line(200,200,mouseX,mouseY); float dx = mouseX-200,dy = mouseY-200; float a = atan2(dy,dx);//神奇的三角函式 可找到arc弧的radians //atan2()出來的值 介於-PI...+PI中間 if(a<0) arc(200,200,200,200,a,0,PIE);//負的...零 else arc(200,200,200,200,0,a,PIE);//零...正的 textSize(30); text("radians: "+ a,100,100);//radians弧度/弳度 text("degrees: "+ degrees(a),100,130);//degrees度 }//week05-4-translate-mouseX-mouseY-rotate-radians-frameCount //比較rotate與translate的順序 void setup(){ size(400,400); } void draw(){ background(204); //請做以下下測試:把下面2行 調一下順序 //會發現:畫東西之前的translate()才有效果 //在電腦圖學理,畫圖時,會照著之前(累積的移動 旋轉)來放東西 translate(mouseX,mouseY);//移到mouse所在位置 rotate(radians(frameCount));//一秒有60個frame 轉60度 要變radians單位 rect(-50,-5,100,10);//寬度100的棒子,但放在左上角 }//week05-5-translate-mouseX-mouseY-rotate-radians-frameCount //比較rotate與translate的順序 void setup(){ size(400,400); } void draw(){ background(204); //請做以下下測試:把下面2行 調一下順序 //會發現:兩行順序不同 一個自轉 一個公轉 //在電腦圖學理,畫圖時,會照著之前(累積的移動 旋轉)來放東西 rotate(radians(frameCount));//一秒有60個frame 轉60度 要變radians單位 translate(mouseX,mouseY);//移到mouse所在位置 rect(-50,-5,100,10);//寬度100的棒子,但放在左上角 }//week05-6-pushMatrix-popMatrix-bad //因為有很多的移動旋轉大腦會亂掉 所以用(分階層)做事 void setup(){ size(400,400); } void draw(){ background(204); translate(width/2,height/2);//把下面這坨移到畫面中心 rotate(radians(frameCount)*10); rect(-50,-5,100,10);//好的 //希望在左邊 -100 的地方也在轉 但是他亂掉了 translate(width/2-100,height/2);//把下面這坨移到畫面中心 rotate(radians(frameCount)*10); rect(-50,-5,100,10); }//week05-6-pushMatrix-popMatrix-good //因為有很多的移動旋轉大腦會亂掉 所以用(分階層)做事 void setup(){ size(400,400); } void draw(){ background(204); pushMatrix(); translate(width/2,height/2);//把下面這坨移到畫面中心 rotate(radians(frameCount)*10); rect(-50,-5,100,10);//好的 popMatrix(); pushMatrix(); translate(width/2-100,height/2);//把下面這坨移到畫面中心 rotate(radians(frameCount)*10); rect(-50,-5,100,10); popMatrix(); }//week05-7-many-pushpushMatrix-popMatrix void setup(){ size(500,500); } void draw(){ background(204); for(int x=50;x<500;x+=100){//每個距離100 for(int y=50;y<500;y+=100){//每個距離100 pushMatrix();//今天主角(再塗學理 會往右縮排) translate(x,y);//移到對應的x,y 座標位置 rotate(radians(frameCount)); rect(-50,-5,100,10);//長度100的棒子 popMatrix();//今天的主角 } } }
沒有留言:
張貼留言