2025年3月20日 星期四

12750794-張瑋宸 week05

 //week05-1_i_love_you

size(300,300);//大小300*300
stroke(255,0,0);//紅色的線條
for(int xx=0;xx<300;xx++){//大的0..300
  for(int yy=0;yy<300;yy++){//大的0..300
    float x = (xx-150)/100.0;//減一半,除100
    float y = -(yy-150)/100.0;//減一半,除100
    //0..300變-150..+150變 -1.5~+1.5
    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);//大小300*300
stroke(255,0,0);//紅色的線條
translate(width/2, height/2);//translate(150,150);
for(int xx=-150;xx<150;xx++){//大的-150..150
  for(int yy=-150;yy<150;yy++){//大的-150..150
    float x = (xx)/100.0;//減一半,除100
    float y = -(yy)/100.0;//減一半,除100
    //0..300變-150..+150變 -1.5~+1.5
    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_atan2_dy_dx_text_radians_degrees
//degress vs. radians 結合 week04-1和week05-2
void setup(){
  size(400,400);
}
void draw(){
  background(120);
  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);//drgees 度
}



//week05-3b_atan2_dy_dx_text_radians_degrees
//degress vs. radians 結合 week04-1和week05-2
void setup(){
  size(400,400);
}
void draw(){
  background(120);
  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("radians"+a,100,100);//radians弧度/弳度
  text("degrees"+degrees(a),100,130);//drgees 度
}






//week05-4_translate_mouseX_mouseY_rotate_radians_frameCount
//比較rotate與translate的順序
void setup(){
  size(400,400);
}
void draw(){
  background(204);
  //請座以下測試: 把下面2行,調一下順序
  //會發現: 畫東西之前的translate()才有效果
  //在電腦圖學理,畫圖時,會照之前(累積的移動、旋轉)來放東西
  translate(mouseX,mouseY);//移到mouse所在位子
  rotate(radians(frameCount));//1秒有60個frame,轉60度,要變radians單位
  rect(-50,-5,100,10);//寬度100的棒子,但在左上角
}


//week05-5_radians_frameCount_translate_mouseX_mouseY_rotate_
//比較rotate與translate的順序
void setup(){
  size(400,400);
}
void draw(){
  background(204);
  //請座以下測試: 把下面2行,調一下順序
  //會發現: 兩行順序對調,一個公轉、一個自轉
  //在電腦圖學理,畫圖時,會照之前(累積的移動、旋轉)來放東西
  rotate(radians(frameCount*10));//1秒有60個frame,轉60度,要變radians單位
  translate(mouseX,mouseY);//移到mouse所在位子
  rect(-50,-5,100,10);//寬度100的棒子,但在左上角
}


//week05-6_pushMatrix_popMatrix_
//因為有很多的移動、旋轉,大腦會當掉,所以用(分階層)做事
void setup(){
  size(400,400);
}
void draw(){
  background(200);
  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();
}


//week06-7_mant_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);//移到對應的x,座標位置
  rotate(radians(frameCount));//旋轉中的
  rect(-50,-5,100,10);//長度100的棒子
  popMatrix();//今天的主角
    }
  }
}














沒有留言:

張貼留言