2023年10月12日 星期四

達yo - week05

今天要做的是移動、旋轉、放大縮小 

1.1畫出3D的盒子和移動它

*P3D 是processing的3D功能

加上轉動

原本只有rotate(mouseX)

但這樣轉的速度太快

所以加上radians

rotate(radians(mouseX))

改成對Y軸做轉動
讓面不要填
使盒子只有線條呈現

如果要把面填起來
fill(0,255,0)//綠色
增加一個放大跟沒有把面填起來的盒子
scale(2)
代表放大兩倍
點線面

在圖案裡面填充紅藍綠

但是沒有顏色的填充時
會發現有一邊沒有連接起來
在endShape()裡加進CLOSE
就會把門關上了

2.1做摺紙







在畫出多個點時會形成一個面

讓用點形成的面做旋轉

TRT

新增pushMatrix和popMatrix
設定只要按下右鍵
就會停止畫點
並開始旋轉(Y軸)


利用滑鼠左鍵、中鍵、右鍵
變換顏色
當滑鼠某個按鍵按下去
讓下方顯示出來

3.1
按下去點點外圍會再出現一個圈

點點的直徑設成10
所以當按下去的距離小於5時
外圍會出現圓圈
程式碼
if(dist(p.x,p.y,mouseX,mouseY)<5){
      ans = p;
}


按下左鍵畫出點點
按下中鍵可以拖曳點點




新增、刪除點點


程式碼
ArrayList<PVector>pt;

void setup(){
  size(400,400,P3D);
  pt = new ArrayList<PVector>();
  for(int i=0;i<37;i++){
    pt.add(new PVector(random(400),random(400)));
  }//假設畫面中,點好了37個頂點
}
void draw(){
  background(255);
  for(PVector p: pt){//畫出全部的頂點
    ellipse(p.x,p.y,10,10);
  }
  if(ans!=null)ellipse(ans.x,ans.y,15,15);
}
PVector ans = null;
void mouseDragged(){
  if(mouseButton==CENTER && ans!=null){
    ans.x = mouseX;
    ans.y = mouseY;
  }
}
void mousePressed(){
  if(mouseButton==LEFT) pt.add(new PVector(mouseX,mouseY));
  else if(mouseButton==CENTER){
    for(PVector p :pt){//厲害的For迴圈(不能增刪裡面的東西)
      if(dist(p.x,p.y,mouseX,mouseY)<5){
        ans = p;
      }
    }
  }else if(mouseButton==RIGHT){//右鍵,要刪掉。要用傳統的for迴圈
    for(int i=0;i<pt.size();i++){//要寫兩行,才等於厲害的一行
      PVector p = pt.get(i);//要寫兩行,才等於厲害的一行
      if(dist(p.x,p.y,mouseX,mouseY)<5){//找到夠近的點
        pt.remove(i);//就把第i個點刪掉。(刪的時候,會把大資料結構右邊的都左移動一格)
      }
    }
  }
}




沒有留言:

張貼留言