2025年3月20日 星期四

week05_呱

 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();

      }

   }

}

















沒有留言:

張貼留言