2023年10月12日 星期四

Week05 啟動

 Week05



-----------------------------------------------------------------------------------------------------------------------------


1.畫出一個立體的盒子,可以隨著滑鼠移動

void setup(){
  size(400,400,P3D);//Processing的3D功能
}
void draw(){
  background(#FFFFF2);
  pushMatrix();//備份矩陣
    translate(mouseX,mouseY);
    box(100);//3D的盒子、方塊
  popMatrix();//還原矩陣
}



2.新增程式碼使盒子根據Y軸旋轉,並且在畫出另一個較大的盒子

void setup(){
  size(400,400,P3D);//Processing的3D功能
}
void draw(){
  background(#89BEE5);
  pushMatrix();//備份矩陣
    translate(mouseX,mouseY);//移動
    rotateY(radians(mouseX));//對Y軸轉動
    fill(#F7F378);
    box(100);//3D的盒子、方塊
    
    
    noFill();//面不要填
    scale(2);//放大2倍
    box(100);//雖然是100的盒子,但上面有放大,他就放大了
  popMatrix();//還原矩陣
}



3.畫出一個三角形且填入色彩

size(400,400,P3D);
beginShape();

fill(255,0,0);
vertex(200,0);

fill(0,255,0);
vertex(0,400);

fill(0,0,255);
vertex(400,400);

endShape(CLOSE);



4.資料結構(?)

ArrayList<PVector> pt;//大的資料結構ArrayList
void setup(){
  size(400,400,P3D);
  pt=new ArrayList<PVector>();
}//初始化,把大的資料結構準備好(裡面放小的資料結構)
void draw(){
  background(#FFFFF2);
  for(PVector p:pt){//特殊的for迴圈會得到小的資料結構
    ellipse(p.x,p.y,10,10);
  }
}
void mousePressed(){
  pt.add(new PVector(mouseX,mouseY));
}//大的資料結構裡,加入小的PVector的物件



5.繼上一項,讓點之間產生線

ArrayList<PVector> pt;//大的資料結構ArrayList
void setup(){
  size(400,400,P3D);
  pt=new ArrayList<PVector>();
}//初始化,把大的資料結構準備好(裡面放小的資料結構)
void draw(){
  background(#89BEE5);
  for(PVector p:pt){
    ellipse(p.x,p.y,10,10);
  }
  beginShape();
  for(PVector p:pt){
    vertex(p.x,p.y);
  }
  endShape();
}
void mousePressed(){
  pt.add(new PVector(mouseX,mouseY));
}//大的資料結構裡,加入小的PVector的物件


6.繼上一項,讓畫出的圖片經壓住右鍵可使其旋轉

ArrayList<PVector> pt;//大的資料結構ArrayList
void setup(){
  size(400,400,P3D);
  pt=new ArrayList<PVector>();
}//初始化,把大的資料結構準備好(裡面放小的資料結構)
void draw(){
  background(#89BEE5);
  pushMatrix();
  if(mousePressed&&mouseButton==RIGHT){
    translate(200,200);
    rotateY(radians(frameCount));
    translate(-200,-200);
  }
  for(PVector p:pt){//特殊的for迴圈,得小的資料結構
    ellipse(p.x,p.y,10,10);
  }
  beginShape();
  for(PVector p:pt){
    vertex(p.x,p.y);
  }
  endShape();
  popMatrix();
}
void mousePressed(){
  if(mouseButton==LEFT){
    pt.add(new PVector(mouseX,mouseY));
  }
  
}//大的資料結構裡,加入小的PVector的物件



7.根據點擊滑鼠不同按鍵來切換顏色

void setup(){
  size(400,400,P3D);
}
void draw(){
  background(255);
  if(mousePressed&&mouseButton==LEFT) background(255,0,0);
  if(mousePressed&&mouseButton==CENTER) background(0,255,0);
  if(mousePressed&&mouseButton==RIGHT) background(0,0,255);
}
void mousePressed(){
  if(mouseButton==LEFT) println("LEFT");
  if(mouseButton==CENTER) println("CENTER");
  if(mouseButton==RIGHT) println("RIGHT");
}




8.畫出很多點(?)

ArrayList<PVector> pt;//大的資料結構ArrayList
void setup(){
  size(400,400,P3D);
  pt=new ArrayList<PVector>();
  for(int i=0;i<20;i++){
    pt.add(new PVector(i*20,20));
  }
}
void draw(){
  background(#89BEE5);
  for(PVector p:pt){//畫出20個頂點
    ellipse(p.x,p.y,10,10);
  }
  if(ans!=null) ellipse(ans.x,ans.y,15,15);
}
PVector ans=null;
void mousePressed(){
  for(PVector p:pt){
    if(dist(p.x,p.y,mouseX,mouseY)<5){
      ans=p;
    }
  }
}



9.可以點很多點(?)

ArrayList<PVector> pt;//大的資料結構ArrayList
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)));
  }
}
void draw(){
  background(#89BEE5);
  for(PVector p:pt){//畫出20個頂點
    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){
    if(dist(p.x,p.y,mouseX,mouseY)<5){
      ans=p;
    }
  }
  }
  
}



10.按右鍵可以刪除點

ArrayList<PVector> pt;//大的資料結構ArrayList
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)));
  }
}
void draw(){
  background(#89BEE5);
  for(PVector p:pt){//畫出20個頂點
    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){
    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個點刪掉,山的時候會把大資料結構右邊的都左疑義格
    }
    }
  }
  
}




沒有留言:

張貼留言