2025年3月20日 星期四

week05-12751100

 week05










///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;   //減一半,除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-2-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

//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(200,200,200,200,0,a,PIE);

  textSize(30);

  text("radians: "+a,100,100); //radians弧度

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

}









//week05-3b

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

  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("degrees: "+degrees(a),100,130); // degrees 度

}









//week05-4-translate-mouaeX-mouseY-rotate-radians-

//比較rotate and translate 的順序

void setup(){

  size(400,400);

}

void draw(){

  background(204);

  //請做以下測試: 把下面兩行調一下順序

  //會發現: 畫東西之前的 translate()才有效果

  //在電腦圖學裡,畫圖時,會照著之前累積的移動,旋轉 來放東西

  translate(mouseX,mouseY);//移到mouse所在位置

  rotate(radians(frameCount)*10);//1秒有60個frame,轉60度,要變radians單位

  rect(-50,-5,100,10);//寬度100的棒子,但放在左上角

}









//week05-5-translate-mouaeX-mouseY-rotate-radians-

//比較rotate and translate 的順序

void setup(){

  size(400,400);

}

void draw(){

  background(204);

  //請做以下測試: 把下面兩行調一下順序

  //會發現: 畫東西之前的 translate()才有效果

  //在電腦圖學裡,畫圖時,會照著之前累積的移動,旋轉 來放東西

  rotate(radians(frameCount)*10);//1秒有60個frame,轉60度,要變radians單位

  translate(mouseX,mouseY);//移到mouse所在位置

  rect(-50,-5,100,10);//寬度100的棒子,但放在左上角

}







//week05-6-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);

}

//week05-6-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);//移到相應的xy座標

      rotate(radians(frameCount));//長100的棒子

      rect(-50,-5,100,10);

      popMatrix();//今天的主角

    }

  }

}

沒有留言:

張貼留言