week05
//week05-1_love
size(300,300); //大小300,300
stroke(255,0,0); //紅色線條
for(int xx=0;xx<300;xx++){ //大的x
for(int yy=0;yy<300;yy++){ //大的y
float x=(xx-150)/100.0; //減一半除100
float y=-(yy-150)/100.0;
float d=x*x+y*y-1;
if(d*d*d-x*x*y*y*y<0)
point(xx,yy);
}
}
week05-1b
//week05-1b_love
size(300,300); //大小300,300
stroke(255,0,0); //紅色線條
translate(width/2,height/2);//translate(150,150);
for(int xx=-150;xx<150;xx++){ //大的x
for(int yy=-150;yy<150;yy++){ //大的y
float x=xx/100.0; //減一半除100
float y=-yy/100.0;
float d=x*x+y*y-1;
if(d*d*d-x*x*y*y*y<0)
point(xx,yy);
}
}
week05-2
//week05-2
//角度 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
//week05-3
//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("radins: "+a,100,100); //radians 弧度/弳度
text("degrees: "+degrees(a),100,130); //degrees 度
}
week05-3b
//week05-3b
//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); //負的...0
else arc(200,200,200,200,0,a,PIE); //0...正的
textSize(30);
text("radins: "+a,100,100); //radians 弧度/弳度
text("degrees: "+degrees(a),100,130); //degrees 度
}
week05-4
//week05-4
//比較 rotate & translate 的順序
void setup(){
size(400,400);
}
void draw(){
background(204);
//做測試,把下面兩行對調順序
//會發現: 畫東西之前 translate()才有效果
//在電腦圖學中,畫圖時會照著之前「累積的移動、旋轉」來放東西
translate(mouseX,mouseY); //移動到mouse所在位置
rotate(radians(frameCount)); //1淼有60個frame,轉60度,要變radians單位
rect(-50,-5,100,10); //寬度100的棒子,放在左上角
}
week05-5
//week05-4
//比較 rotate & translate 的順序
void setup(){
size(400,400);
}
void draw(){
background(204);
//做測試,把下面幾行對調順序
//會發現: 畫東西之前 translate()才有效果
//在電腦圖學中,畫圖時會照著之前「累積的移動、旋轉」來放東西
rotate(radians(frameCount)*5); //1秒有60個frame,轉60度,要變radians單位
translate(mouseX,mouseY); //移動到mouse所在位置
rect(-50,-5,100,10); //寬度100的棒子,放在左上角
}
week05-6
//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);
//希望在左邊-00的地方,也在轉但亂掉了
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
//week05-7_many_pushMatrix_popMatrix
void setup(){
size(500,500);
}
void draw(){
background(204);
for(int x=50;x<500;x+=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();
}
}
}
沒有留言:
張貼留言