2023年10月12日 星期四

Week05 賴奕廷

 Week05

*step01

生成一個3D立體的盒子、鵝黃色背景,有移動popMatrix pushMatrix:

void setup(){   size(400,400,P3D); } void draw(){   background(#FFFFF2);   pushMatrix();     translate(mouseX,mouseY);     box(100);   popMatrix(); }   轉動盒子,對Y軸轉動:
void setup(){
  size(400,400,P3D);
}
void draw(){
  background(#FFFFF2);
  pushMatrix();
    translate(mouseX,mouseY);
    rotateY(radians(mouseX));//對Y軸轉動
    box(100);
  popMatrix();
}  
透明外盒放大兩倍,內盒綠色:
void setup(){
  size(400,400,P3D);
}
void draw(){
  background(#FFFFF2);
  pushMatrix();
    translate(mouseX,mouseY);
    rotateY(radians(mouseX));//對Y軸轉動
    fill(0,255,0);
    box(100);
    noFill();
    scale(2);
    box(100);
  popMatrix();
}  
三角形畫線少了封閉曲線,點線面三角形彩色:
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到endshape裡面:
size(410,410,P3D);
noFill();
beginShape();
vertex(200,0);
vertex(0,400);
vertex(400,400);
endShape(CLOSE);
*step02
可大可小的陣列,大的資料結構準備好裡面放小的資料結購,特殊的for迴圈得到小資料結構:

ArrayList<PVector> pt; void setup(){   size(400,400,P3D);   pt=new ArrayList<PVector>(); } void draw(){   background(#FFFFF2);   for(PVector p:pt){     ellipse(p.x,p.y,10,10);   } } void mousePressed(){  pt.add(new PVector(mouseX,mouseY)); }   畫線,做出形狀:
ArrayList<PVector> pt; void setup(){   size(400,400,P3D);   pt=new ArrayList<PVector>(); } void draw(){   background(#FFFFF2);   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)); }   增加旋轉,左鍵畫線,右鍵旋轉:
ArrayList<PVector> pt;
void setup(){
  size(400,400,P3D);
  pt=new ArrayList<PVector>();
}
void draw(){
  background(#FFFFF2);
  pushMatrix();
  if(mousePressed&&mouseButton==RIGHT){
    translate(200,200);
    rotateY(radians(frameCount));
    translate(-200,-200);
  }
  for(PVector p:pt){
    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)); 
  }
}  
左中右鍵變顏色:
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);
}
選擇滑鼠點擊的點:
ArrayList<PVector> pt;
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(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 mousePressed(){
  for(PVector p:pt){
    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)));
  }
}
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){
    if(dist(p.x,p.y,mouseX,mouseY)<5){
      ans=p;
      }
    }
  }
}
右鍵刪除點點,使用remove,找到夠進的點就把第i個點刪掉:
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)));
  }
}
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){
    if(dist(p.x,p.y,mouseX,mouseY)<5){
      ans=p;
      }
    }
  }else if(mouseButton==RIGHT){
    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);
      }
    }
  }
}

沒有留言:

張貼留言