2025年3月27日 星期四

12750211-week06

1.第一個:基礎旋轉盒子

//week06-1_ellipse_translate_push_rotate_box_pop

//旋轉立方體
void setup(){
  size(500,500,P3D);
}
void draw(){
  background(142);
  ellipse(width/2,height/2,200,200);// 畫出參考的圓形
  
  translate(width/2,height/2);//畫面中心
  pushMatrix();
    if(mousePressed)// 按下滑鼠時才旋轉
      rotateZ(radians(frameCount)); // 沿著 Z 軸旋轉
    box(100,30,30);
   popMatrix();
}

 

2.第二個:移動盒子的位置以對準中心
//week06-2_ellipse_translate_push_rotate_translate_box_pop
//再加一個移動 把物體放到[轉盤的中心]
// 偏移後的旋轉立方體


void setup(){
  size(500,500,P3D);
}
void draw(){
  background(142);
  ellipse(width/2,height/2,200,200);
  
  translate(width/2,height/2);//畫面中心
  pushMatrix();
    if(mousePressed)//按下滑鼠才會動
      rotateZ(radians(frameCount));//對著下面中心旋轉
    translate(-50,0,0);//向左平移,讓立方體右側位於圓心
    box(100,30,30);
   popMatrix();
}

3.第三個:滑鼠拖曳控制物體移動

//week06-3_push_translate_rotate_translate_box_pop
//拖曳與旋轉的立方體
void setup(){
  size(500,500,P3D);
}
void draw(){
  background(142);
  ellipse(width/2,height/2,200,200);
  
  translate(width/2,height/2);//畫面中心
  pushMatrix();
    translate(x,y);
    if(mousePressed && mouseButton==RIGHT)//按下滑鼠右鍵才會動
      rotateZ(radians(frameCount));//對著Z旋轉
    translate(-50,0,0);// 向左平移,讓立方體右側位於圓心
    box(100,30,30);
   popMatrix();
}
float x=0,y=0;
void mouseDragged(){
  x+=mouseX-pmouseX;// 計算滑鼠水平拖曳距離
  y+=mouseY-pmouseY;// 計算滑鼠垂直拖曳距離
}


4.第四個:加入中心球體與手肘

// week06-4_sphere_box_push_T_R_T_box_pop
void setup(){
  size(500,400,P3D);
}
void draw(){
  background(255); // Step00 設定背景顏色
  translate(width/2,height/2); // Step01 將原點移至畫面中心
  sphere(10); // Step02 繪製中心參考球體

  box(200,50,25); // Step03 繪製手肘

  fill(252,131,77); // Step04 設定手腕顏色
  pushMatrix();
    translate(x,y); // Step05 根據滑鼠拖曳位置移動
    if(mousePressed)
      rotateZ(radians(frameCount)); // Step06 沿著 Z 軸旋轉
    translate(25,0,0); // Step07 向右平移,將手腕左端放置於圓心
    box(50,25,50); // Step08 繪製小手腕
  popMatrix();
}
float x=0,y=0;
void mouseDragged(){
  x+=mouseX-pmouseX;
  y+=mouseY-pmouseY;
}


5.第五個:組合兩層關節的手臂

// week06-5_push_T_box_push_T_R_T_box_pop_pop
void setup(){
  size(500,400,P3D);
}
void draw(){
  background(255); // Step00 設定背景顏色
  translate(width/2,height/2); // Step01 將原點移至畫面中心
  sphere(10); // Step02 繪製中心參考球體

  fill(252,131,77); // Step03 設定手臂顏色
  pushMatrix();
    translate(x,y); // Step04 根據滑鼠拖曳位置移動
    box(200,50,25); // Step05 繪製手肘

    pushMatrix();
      translate(100,0); // Step06 移動至手肘右端
      rotateZ(radians(frameCount)); // Step07 沿著 Z 軸旋轉
      translate(25,0,0); // Step08 向右平移,將手腕左端放置於圓心
      box(50,25,50); // Step09 繪製手腕
    popMatrix();
  popMatrix();
}
float x=0,y=0;
void mouseDragged(){
  x+=mouseX-pmouseX;
  y+=mouseY-pmouseY;
}

6.第六個:三層關節的手臂

// week06-6_push_box_push_TRT_box_push_TRT_box_pop_pop_pop
void setup(){
  size(500,400,P3D);
}
void draw(){
  background(255); // Step00 設定背景顏色
  translate(width/2,height/2); // Step01 將原點移至畫面中心
  sphere(10); // Step02 繪製中心參考球體

  fill(252,131,77); // Step03 設定手臂顏色
  pushMatrix();
    box(50,200,25); // Step04 繪製手臂
    pushMatrix();
      translate(x,y); // Step05 根據滑鼠拖曳位置移動
      if(mousePressed)
        rotateZ(radians(frameCount)); // Step06 沿著 Z 軸旋轉
      translate(100,0); // Step07 移動至手肘右端
      box(200,50,25); // Step08 繪製手肘

      pushMatrix();
        translate(100,0); // Step09 移動至手腕右端
        rotateZ(radians(frameCount)); // Step10 沿著 Z 軸旋轉
        translate(25,0,0); // Step11 向右平移,將手腕左端放置於圓心
        box(50,25,50); // Step12 繪製手腕
      popMatrix();
    popMatrix();
  popMatrix();
}
float x=0,y=0;
void mouseDragged(){
  x+=mouseX-pmouseX;
  y+=mouseY-pmouseY;
}

7.第七個:多層旋轉手臂

// week06-7_push_RRT_many_TRT_inside_pop
void setup(){
  size(500,800,P3D);
}
void draw(){
  background(255); // Step00 設定背景顏色
  translate(width/2,height/2); // Step01 將原點移至畫面中心
  sphere(10); // Step02 繪製中心參考球體

  fill(252,131,77); // Step03 設定手臂顏色
  pushMatrix();
    if(mousePressed && mouseButton==RIGHT)
      rotateY(radians(frameCount)); // Step04 沿著 Y 軸旋轉
    if(mousePressed && mouseButton==RIGHT)
      rotateZ(radians(frameCount)); // Step05 沿著 Z 軸旋轉
    translate(0,-100); // Step06 向上平移,調整手臂位置
    box(50,200,25); // Step07 繪製手臂

    pushMatrix();
      translate(0,-100); // Step08 移動至手臂頂端
      rotateZ(radians(frameCount)); // Step09 沿著 Z 軸旋轉
      translate(100,0); // Step10 移動至手肘右端
      box(200,50,25); // Step11 繪製手肘

      pushMatrix();
        translate(100,0); // Step12 移動至手腕右端
        rotateZ(radians(frameCount)); // Step13 沿著 Z 軸旋轉
        translate(25,0,0); // Step14 向右平移,將手腕左端放置於圓心
        box(50,25,50); // Step15 繪製手腕
      popMatrix();
    popMatrix();
  popMatrix();
}
float x=0,y=0;
void mouseDragged(){
  x+=mouseX-pmouseX;
  y+=mouseY-pmouseY;
}


沒有留言:

張貼留言