2025年3月20日 星期四

12750263_week05

week05_1_i_love_you

size(300,300); // 大小300x300

stroke(255,0,0); // 紅色線條

for(int xx=0;xx<300;xx++){

   for(int yy=0;yy<300;yy++){

     float x = (xx-150)/100.0; // 減一半,除100

     float y = -(yy-150)/100.0; // 減一半,除100

     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); // 大小300x300

stroke(255,0,0); // 紅色線條

translate(width/2,height/2);

for(int xx=-150;xx<150;xx++){

   for(int yy=-150;yy<150;yy++){

     float x = xx/100.0; // 減一半,除100

     float y = - yy/100.0; // 減一半,除100

     float d = x*x + y*y - 1;

     if( d*d*d - x*x*y*y*y < 0 )

     point(xx,yy); 

   }

}









week05_2_for_for_ellipse_arc_arc_radians_360

角度 degrees 度vs. radians 弧度

size(600,600); // 大小300x300

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_atan2_dy_dx_text_radians_degrees

角度 degrees vs. radians 弧度 結合 week04_1 and 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( 200, 200, 200, 200, 0, a, PIE );

  textSize(30);

  text("radians:" + a , 100, 100);

  text("degrees:" + degrees(a) , 100, 130);

}















week05_3b_atan2_dy_dx_text_radians_degrees
角度 degrees vs. radians 弧度 結合 week04_1 and 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);
  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);
  text("degrees:" + degrees(a) , 100, 130);
}














week05_4_atan2_dy_dx_text_radians_degrees
比較 rotate and translate 的順序
void setup(){
   size(400,400); 
}
void draw(){
  background(204);
  // 請做以下測試: 把下面兩行,調一下順序
  // 會發現: 畫東西之前的 translate() 才有效果
  // 在電腦圖學裡,畫圖時,會照著之前 "累積的移動、旋轉" 來放東西
  translate(mouseX,mouseY); // 移到mouse所在位置
  rotate(radians(frameCount)*50);
  rect(-50, -5, 100, 10); // 寬度100的棒子,但放在左上角
}















 week05_5_rotate_radians_frameCount_translate_mouseX_mouseY
 比較 rotate and translate 的順序
void setup(){
   size(400,400); 
}
void draw(){
  background(204);
  // 請做以下測試: 把下面兩行,調一下順序
  // 會發現: 畫東西之前的 translate() 才有效果
  // 在電腦圖學裡,畫圖時,會照著之前 "累積的移動、旋轉" 來放東西
  rotate(radians(frameCount)*50); // 移到mouse所在位置
  translate(mouseX,mouseY);
  rect(-50, -5, 100, 10); // 寬度100的棒子,但放在左上角
}














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_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);
  
  translate(width/2-100, height/2); // 移到畫面中心
  rotate(radians(frameCount)*10);
  rect(-50, -5, 100, 10);
}













week05_7_many_pushMatrix_popMatrix
void setup(){
   size(500,500); 
}
void draw(){
  background(204);
  for(int x=50;x<500;x+=50){ // 每個距離100
    for(int y=50;y<500;y+=100){ // 每個距離100
      pushMatrix();
      translate(x,y); // 移到對應位置
      rotate(radians(frameCount));
      rect(-50, -5, 100, 10);
      popMatrix();
    }
  }
}













week05_7b_many_pushMatrix_popMatrix
void setup(){
   size(500,500); 
}
void draw(){
  background(204);
  for(int x=50;x<500;x+=50){ // 每個距離100
    for(int y=50;y<500;y+=100){ // 每個距離100
      pushMatrix();
      translate(x,y); // 移到對應位置
      float a = (y*500+x)/50000.0;
      rotate(radians(frameCount)*a);
      rect(-50, -5, 100, 10);
      popMatrix();
    }
  }
}


沒有留言:

張貼留言