2025年3月20日 星期四

week04-12750192

 //week05_1_I_love_U

size(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;//0...300 --> -150...300 再變成 -1.5...1.5

      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_I_love_U

size(300,300);

stroke(255,0,0);

translate(150,150);//translate(widh/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;//0...300 --> -150...300 再變成 -1.5...1.5

      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_for_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_atan2_dy_dx_text_radians_degrees
//degrees vs, radians
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);//把算出來的radians拿來用
   textSize(30);
   text("radians"+a,100,100);// 弧度/弳度
   text("degrees"+degrees(a),100,130);//degrees 度
}





//week05_3b_atan2_dy_dx_text_radians_degrees
//degrees vs, radians
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);//把算出來的radians拿來用
   else arc(200,200,200,200,0,a,PIE);
   textSize(30);
   text("radians"+a,100,100);// 弧度/弳度
   text("degrees"+degrees(a),100,130);//degrees 度
}


自轉

//week05_4_translate_mouseX_mouseY_rotate__radians_frameCount
//比較roate and translate 順序
void setup(){
   size(400,400); 
}
void draw(){
  background(204);
  //test: 下面兩行調順序
  //會發現化東西前的translate()才有效
  //在電腦圖學畫圖時會照著"之前累積的移動量和旋轉來放東西"
  translate(mouseX,mouseY);//移動到滑鼠所在位置
  rotate(radians(frameCount*10));//一秒有60radians 轉60 度,要變radians
  rect(-50,-5,100,10);//width 100 rect 放左上角
}
公轉
//week05_5_rotate_radians_frameCount_translate_mouseX_mouseY
//比較roate and translate 順序
void setup(){
   size(400,400); 
}
void draw(){
  background(204);
  //test: 下面兩行調順序
  //會發現化東西前的translate()才有效
  //在電腦圖學畫圖時會照著"之前累積的移動量和旋轉來放東西"
  rotate(radians(frameCount*10));//一秒有60radians 轉60 度,要變radians
  translate(mouseX,mouseY);//移動到滑鼠所在位置
  rect(-50,-5,100,10);//width 100 rect 放左上角
}







//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_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_pushMatrix_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);//移動到對應位置
        rotate(radians(frameCount));
        rect(-50,-5,100,10);
      popMatrix();
    }
  }
  
}



















沒有留言:

張貼留言