2023年10月12日 星期四

week05 互動技術概論

畫3D圖

void setup(){

  size(400,400,P3D);//Processing 的3D功能

}

void draw(){

  background(#FFFFF2);

  pushMatrix();//備份矩陣

    translate(mouseX,mouseY);//移動

    box(100);//3D盒子,方塊

    popMatrix();//還原矩陣

}


rotateY(radians(mouseX));//對Y軸轉

填色

void setup(){

  size(400,400,P3D);//Processing 的3D功能

}

void draw(){

  background(#FFFFF2);

  pushMatrix();//備份矩陣

    translate(mouseX,mouseY);//移動

    rotateY(radians(mouseX));//對Y軸轉

    fill(0,255,0);//面填綠色

    box(100);//3D盒子,方塊

    noFill();//面部填色

    scale(2);//放大2倍

    box(100);

    popMatrix();//還原矩陣

}

size(410,410,P3D);

beginShape();

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

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

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

endShape();

如何解決不完整的三角形
size(410,410,P3D);
noFill();
beginShape();
vertex(200,0);
vertex(0,400);
vertex(400,400);
endShape();

endShape(CLOSE);


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的物件


ArrayList<PVector> pt;//大的資料結構ArrayList
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){//特殊for迴圈,得小資料結構
     vertex(p.x,p.y);
  }
  endShape();
}
void mousePressed(){
   pt.add(new PVector(mouseX,mouseY)); 
}//大的資料結構裡,加入小的PVector的物件


右鍵旋轉 左鍵畫點

ArrayList<PVector> pt;//大的資料結構ArrayList
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){//特殊for迴圈,得小資料結構
       vertex(p.x,p.y);
    }
    endShape();
    popMatrix();
}
void mousePressed(){
   if(mouseButton==LEFT){
   pt.add(new PVector(mouseX,mouseY)); 
   }
}//大的資料結構裡,加入小的PVector的物件

按滑鼠中鍵左鍵右鍵變色
void setup(){
  size(400,400,P3D);
}
void draw(){
   background(255);
   if(mousePressed && mouseButton==LEFT) background(255,0,0);
   if(mousePressed && mouseButton==CENTER) background(255,0,0);
   if(mousePressed && mouseButton==RIGHT) background(255,0,0);
}


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){//畫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; 
     }
   }
}


滑鼠中鍵拖曳點
ArrayList<PVector> pt;
void setup(){
  size(400,400,P3D);
  pt = new ArrayList<PVector>();
  for(int i=0;i<20;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; 
        }
     }
   }
}

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)) );
  }//假設畫面中,點好了20個頂點
}
void draw(){
  background(255);
  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){//厲害的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++){//要寫2行,才能等於厲害的1行
      PVector p = pt.get(i);//要寫2行,才能等於厲害的1行
      if( dist(p.x, p.y, mouseX, mouseY) < 5){//找到購進的點
        pt.remove(i);//就把第(i)個點刪掉(刪的時候會把大資料結構都左移動一格)
      }
    }
  }
}




沒有留言:

張貼留言