作業1
//week05-1-i-love-you size(300,300);//大小300x300 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;//減一半 除100 float y=-(yy-150)/100.0;//減一半 除100 //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); } }
作業1b//week05-1b-i-love-you size(300,300);//大小300x300 stroke(255,0,0);//紅色的線條 translate(150,150); 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 float y=-yy/100.0;//減一半 除100 //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); } }
作業2
//week05-2-for-for-ellipse-arc-arc-radians-360
//角度 degress 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);
}
}
作業3
//week05-3-atans-dy-dx-text-radians-degrees
//degrees vs. radians 結合 week04-1 和 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 中間
arc(200,200,200,200,0,a,PIE); //把算出來的arc radians拿來用
textSize(30);
text("radians:"+a,100,100);//radians 弧度/弳度
text("degress:"+degrees(a),100,130);//degrees 度
}
作業3b//week05-3b-atan2-dy-dx-text-radians-degrees
//degrees vs. radians 結合 week04-1 和 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("degress:"+degrees(a),100,130);//degrees 度
}
作業4//week05-4-translate-mouseX-mouseY-rotate-radians-frameCout
//比較 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的棒子 但放在左上角
}
作業5//week05-5-rotate-radians-frameCout-translate-mouseX-mouseY
//比較 rotate 與 translate 的順序
void setup(){
size(400,400);
}
void draw(){
background(204);
//請做以下測試:把下面2行 調一下順序
//會發現:兩行順序不同,一個自轉一個公轉
//在電腦圖學理,畫圖時,會照著之前「累積的移動、旋轉」來放東西
rotate(radians(frameCount)*10);//一秒有60個frame 轉60度 要變radians單位
translate(mouseX,mouseY);//移到mouse所在位置
rect(-50,-5,100,10);//寬度100的棒子 但放在左上角
}
作業6-bad//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);
}
作業6-good//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();
}
作業7
//week05-7-many-pushMatrix-popMatrixvoid 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();//今天的主角
}
}
}
沒有留言:
張貼留言