2023年10月26日 星期四

week07 互動技術概論

 halloween

01 畫線 按下開始畫 放開後消失 用背景清除

void setup(){

 size(400,400);

 background(255);

}

void draw(){

 if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY); 

}

void mouseReleased(){

 background(255); 

}


02 移動

void setup(){

 size(400,400);

 background(255);

}

float ghostX=400,ghostY=20;

void draw(){

  ellipse(200,200,15,15);

 if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY); 

 ellipse(ghostX,ghostY,15,15);

 float dx=200-ghostX, dy=200-ghostY,len=sqrt(dx*dx+dy*dy);

 ghostX+=dx/len/3;

 ghostY+=dy/len/3;

}

void mouseReleased(){

 background(255); 

}


03 

ArrayList<PVector>pt = new ArrayList<PVector>();

void setup(){

 size(400,400);

 background(255);

}

float ghostX=400,ghostY=20;

void mouseDragged(){

   pt.add(new PVector(mouseX,mouseY)); 

}

void draw(){

background(255);

  ellipse(200,200,15,15);

 //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY); 

 for(int i=0;i<pt.size();i++){

    PVector p = pt.get(i);

    ellipse(p.x,p.y,3,3);

 }

 ellipse(ghostX,ghostY,15,15);

 float dx=200-ghostX, dy=200-ghostY,len=sqrt(dx*dx+dy*dy);

 ghostX+=dx/len/3;

 ghostY+=dy/len/3;

}

void mouseReleased(){

 background(255); 

}


04 從畫圓變畫線

ArrayList<PVector>pt;


void setup(){

  size(400,400);

  background(255);

  pt= new ArrayList<PVector>();

}

float ghostX=400,ghostY=20;

void mouseDragged(){ //按下mouse鍵 再拖他

  pt.add(new PVector(mouseX,mouseY));

}

void draw(){

  background(255);

  ellipse(200,200,15,15);

  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);

  for(int i=0; i<pt.size()-1; i++){

    PVector p = pt.get(i),p2 = pt.get(i+1);

    line(p.x,p.y,p2.x,p2.y);//ellipse(p.x,p.y,3,3);

  }

  ellipse(ghostX,ghostY,15,15);

  float dx = 200-ghostX, dy = 200-ghostY,len = sqrt(dx*dx+dy*dy);

  ghostX += dx / len / 3;

  ghostY += dy / len / 3;

}

void mouseReleased(){

  for(int i=pt.size()-1;i>=0;i--){ //倒過來的for迴圈

    pt.remove(i);

  }

}




05 

ArrayList<PVector>pt=new ArrayList<PVector>();

void setup(){

  size(400,400);

  background(255);

}

float ghostX=400,ghostY=20;

void mouseDragged(){

  pt.add(new PVector(mouseX,mouseY));

}

void draw(){

  background(255);

  ellipse(200,200,15,15);

  ellipse(ghostX,ghostY,15,15);

  strokeWeight(4);

  float dpx=0,dpy=0; // 看p.x p2.x的差距 p.y p2.y的差距

  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);

  for(int i=0;i<pt.size()-1;i++){

    PVector p=pt.get(i),p2=pt.get(i+1);

    dpx+=abs(p2.x-p.x);//累積x的移動量

    dpy+=abs(p2.y-p.y);//累積y的移動量

  }

  if(dpx>100 && dpy<40) stroke(255,0,0);//typel紅色的橫線

  else stroke(0);//黑色線

  for(int i=0;i<pt.size()-1;i++){

    PVector p=pt.get(i),p2=pt.get(i+1);

    line(p.x,p.y,p2.x,p2.y);//ellipse(p.x,p.y,3,3)

  }

  float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);

  ghostX+=dx/len/3;

  ghostY+=dy/len/3;

}

void mouseReleased(){

  for(int i=pt.size()-1;i>=0;i--){

    pt.remove(i);

  }

}


06

ArrayList<PVector>pt=new ArrayList<PVector>();

void setup(){

  size(400,400);

  background(255);

}

float ghostX=400,ghostY=20;

void mouseDragged(){

  pt.add(new PVector(mouseX,mouseY));

}

void draw(){

  background(255);

  strokeWeight(1);

  stroke(0);ellipse(200,200,15,15);

  stroke(0);ellipse(ghostX,ghostY,15,15);

  ellipse(200,200,15,15);

  ellipse(ghostX,ghostY,15,15);

  strokeWeight(4);

  float dpx=0,dpy=0;

  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);

  for(int i=0;i<pt.size()-1;i++){

    PVector p=pt.get(i),p2=pt.get(i+1);

    dpx+=abs(p2.x-p.x);

    dpy+=abs(p2.y-p.y);

  }

  if(dpx>100 && dpy<40) stroke(255,0,0); //type 1紅色的線

  else if(dpx<40 && dpy>100) stroke(0,0,255); // type 2 藍色的線

  else stroke(0);

  for(int i=0;i<pt.size()-1;i++){

    PVector p=pt.get(i),p2=pt.get(i+1);

    line(p.x,p.y,p2.x,p2.y);

  }

  

  float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);

  ghostX+=dx/len/3;

  ghostY+=dy/len/3;

}

void mouseReleased(){

  for(int i=pt.size()-1;i>=0;i--){

    pt.remove(i);

  }

}


07

ArrayList<PVector> pt = new ArrayList<PVector>();///資料結構

void setup(){

  size(400,400);

  background(255);

}

float ghostX=40, ghostY=20;

void mouseDragged(){//按下滑鼠拖曳

  pt.add(new PVector(mouseX,mouseY));

}

void draw(){

  background(255);

  strokeWeight(1);

  stroke(0);ellipse(200,200,15,15);

  stroke(0);ellipse(ghostX,ghostY,15,15);

  

  strokeWeight(4);//變粗

  float dpx=0, dpy=0;///要看p.x p2.x的差距, p.y p2.y的差距

  float rightdown = 0, rightup =0;///往右下,往右上

  boolean green_part1 = false,green_ok=false;

  for (int i=0; i<pt.size()-1; i++){///累積移動量

    PVector p=pt.get(i) , p2 = pt.get(i+1);

    dpx += abs(p2.x - p.x);//累積x的移動量

    dpy += abs(p2.y - p.y);//累積y的移動量

    if(p2.x - p.x>0 && p2.y-p.y>0) rightdown+=sqrt(dpx*dpx+dpy*dpy);

    if(p2.x - p.x>0 && p2.y-p.y<0) rightup+=sqrt(dpx*dpx+dpy*dpy);

    

    if(green_part1==false && rightdown>150) green_part1 = true;

    else if(green_part1==true && rightup>150) green_ok=true;

  }

  if( dpx>100 &&  dpy<40) stroke(255,0,0);

  else if( dpx<40 && dpy>100) stroke(0,0,255);

  else if(green_ok) stroke(0,255,0);

  else stroke(0);//黑色 

  for (int i=0; i<pt.size()-1; i++){

    PVector p=pt.get(i) , p2 = pt.get(i+1);

    line( p.x, p.y, p2.x, p2.y);

  }

  

  float dx = 200-ghostX, dy = 200-ghostY, len=sqrt(dx*dx+dy*dy);

  ghostX += dx/ len/ 3;

  ghostY += dy/ len/ 3;

}

void mouseReleased(){

  for(int i=pt.size()-1;i>=0;i--){///到過來的for迴圈

    pt.remove(i);

  }

}


08

ArrayList<PVector> pt = new ArrayList<PVector>();

void setup()

{

  size(400, 400);

  background(255);

}

float ghostX=400, ghostY=20;

void mouseDragged(){ 

  pt.add(new PVector(mouseX, mouseY));

}

void draw()

{

  background(255);

  strokeWeight(1);

  stroke(0); ellipse(200, 200, 15, 15);

  stroke(0); ellipse(ghostX, ghostY, 15, 15); 

  // if (mousePressed) line(mouseX, mouseY, pmouseX, pmouseY);

  strokeWeight(4);

  float dpx=0, dpy=0; // 要看p.x p2.x的差距, p.y p2.y 的差距

  float botton_right=0; // 往右下

  for (int i=0; i<pt.size()-1; i++){ 

    PVector p = pt.get(i), p2 = pt.get(i+1);

    line(p.x, p.y, p2.x, p2.y); // ellipse(p.x, p.y, 3, 3);

    dpx += abs(p2.x - p.x); // 累積x的移動量

    dpy += abs(p2.y - p.y); // 累積y的移動量

    if (p2.x - p.x > 0 && p2.y - p.y > 0) botton_right+=sqrt(dpx*dpx+dpy+dpy);

  }

  

  if (dpx>100 && dpy<40) stroke(255, 0, 0); 

  else if (dpx<40 && dpy>100) stroke(0, 0, 255); 

  else if (botton_right>150) stroke(0, 255, 0); 

  else stroke(0);

  for (int i=0; i<pt.size()-1; i++){ 

    PVector p = pt.get(i), p2 = pt.get(i+1); 

    line(p.x, p.y, p2.x, p2.y); // ellipse(p.x, p.y, 3, 3);

  }

  float dx = 200-ghostX, dy = 200-ghostY, len=sqrt(dx*dx+dy*dy);

  ghostX+=dx/len/3;

  ghostY+=dy/len/3;

}

void mouseReleased()

{

  // background(255);

  for (int i=pt.size()-1; i>=0; i--){

    pt.remove(i);

  }

}

09

ArrayList<PVector> pt = new ArrayList<PVector>();

void setup()

{

  size(400, 400);

  background(255);

}

float ghostX=400, ghostY=20;

void mouseDragged(){ 

  pt.add(new PVector(mouseX, mouseY));

}

void draw()

{

  background(255);

  strokeWeight(1);

  stroke(0); ellipse(200, 200, 15, 15);

  stroke(0); ellipse(ghostX, ghostY, 15, 15); 

  // if (mousePressed) line(mouseX, mouseY, pmouseX, pmouseY);

  strokeWeight(4);

  float dpx=0, dpy=0; // 要看p.x p2.x的差距, p.y p2.y 的差距

  float botton_right=0, top_right=0; // 往右下, 右上

  boolean green_part1 = false, green_ok = false;

  for (int i=0; i<pt.size()-1; i++){ 

    PVector p = pt.get(i), p2 = pt.get(i+1); 

    line(p.x, p.y, p2.x, p2.y); // ellipse(p.x, p.y, 3, 3);

    dpx += abs(p2.x - p.x); // 累積x的移動量

    dpy += abs(p2.y - p.y); // 累積y的移動量

    if (p2.x - p.x > 0 && p2.y - p.y > 0) botton_right+=sqrt(dpx*dpx+dpy+dpy);

    if (p2.x - p.x > 0 && p2.y - p.y < 0) top_right+=sqrt(dpx*dpx+dpy+dpy);;

    ellipse(p.x, p.y, 10, 10);

    if (green_part1==false && top_right>150) green_part1 = true;

    else if (green_part1==true && top_right>150) green_ok =true;

  }

  

  if (dpx>100 && dpy<40) stroke(255, 41, 98); // horizonal line (red)

  else if (dpx<40 && dpy>100) stroke(41, 171, 255); // vertical line (blue)

  else if (green_ok) stroke(44, 255, 41); // botton_right (green)

  else stroke(0); // (black)

  for (int i=0; i<pt.size()-1; i++){ 

    PVector p = pt.get(i), p2 = pt.get(i+1); 

    line(p.x, p.y, p2.x, p2.y); // ellipse(p.x, p.y, 3, 3);

  }

  

  float dx = 200-ghostX, dy = 200-ghostY, len=sqrt(dx*dx+dy*dy);

  ghostX+=dx/len/3;

  ghostY+=dy/len/3;

}

void mouseReleased()

{

  // background(255);

  for (int i=pt.size()-1; i>=0; i--){

    pt.remove(i);

  }

}

10


ArrayList<PVector>pt=new ArrayList<PVector>();
void setup(){
  size(400,400);
  background(255);
}
float ghostX=400,ghostY=20;
void mouseDragged(){
  pt.add(new PVector(mouseX,mouseY));
}
void draw(){
  background(255);
  strokeWeight(1);
  stroke(0); ellipse(200,200,15,15);
  stroke(0); ellipse(ghostX,ghostY,15,15);
  strokeWeight(4);
  float dpx=0,dpy=0;
  float rightdown = 0,green_rightup=0;
  float rightup = 0,yellow_rightdown =0;
  boolean green_part1 = false,green_ok = false;
  boolean yellow_part1 = false,yellow_ok = false;
  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);
  for(int i=0;i<pt.size()-1;i++){
    PVector p=pt.get(i),p2=pt.get(i+1);
    dpx+=abs(p2.x-p.x);
    dpy+=abs(p2.y-p.y);
    if(p2.x-p.x >0 && p2.y -p.y >0) rightdown+=sqrt(dpx*dpx+dpy*dpy);
    if(p2.x-p.x >0 && p2.y -p.y <0) green_rightup+=sqrt(dpx*dpx+dpy*dpy);
    if(p2.x-p.x >0 && p2.y -p.y <0) rightup+=sqrt(dpx*dpx+dpy*dpy);
    if(yellow_part1 && p2.x-p.x >0 && p2.y -p.y >0) yellow_rightdown+=sqrt(dpx*dpx+dpy*dpy);
    //ellipse(p.x,p.y,10,10);
    if(green_part1==false && rightdown>150) green_part1 = true;
    else if(green_part1==true && green_rightup>150) green_ok = true;
    if(yellow_part1==false && rightdown>150) yellow_part1 = true;
    else if(yellow_part1==true && yellow_rightdown>150) yellow_ok = true;
  }
  println(rightdown);
  if(dpx>100 && dpy<40) stroke(255,0,0);
  else if(dpx<40&&dpy>100) stroke(0,0,255);
  else if(green_ok) stroke(0,255,0);
  //else if(green part1) stroke(0,128,0);
  else if(yellow_ok) stroke(255,255,0);
  else stroke(0);
  for(int i=0;i<pt.size()-1;i++){
    PVector p=pt.get(i),p2=pt.get(i+1);
    line(p.x,p.y,p2.x,p2.y);
  }
  
  float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);
  ghostX+=dx/len/3;
  ghostY+=dy/len/3;
}
void mouseReleased(){
  for(int i=pt.size()-1;i>=0;i--){
    pt.remove(i);
  }
}












沒有留言:

張貼留言