2023年10月26日 星期四

累累累WEEK07

 WEEK 07

STEP 01-1 滑鼠放開 畫畫的筆跡會消失





void setup()
{
 size(400,400);
  
}
void draw()
{
  background(255);
  line(mouseX, mouseY, pmouseX, pmouseY);
}
void mouseReleased()//滑鼠畫畫滑鼠放開會清空
{
  background(255);
}

Step 01-2 用圓圈家黑色的直線當作鬼 靠近中心圓圈







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);
}

step01-3 加一個留下慘影的Arraylist


ArrayList<PVector> pt = new ArrayList<PVector>();//大資料結構裡面有小資料結構 pt是點
void setup()
{
   size(400,400);
   background(255);
}
float ghostX = 400, ghostY = 20;
void mouseDragged()//按下mouse鍵  再拖它
{
  pt.add( new PVector(mouseX, mouseY) );
}
void draw()
{
  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);
}

step 01-4 滑鼠放開 圓圈被移除



把圓圈改成線 畫完不會留下殘影










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()-1;i++)
  {
    PVector p = pt.get(i),p2 = pt.get(i+1);
    line(p.x,p.y,p2.x,p2.y);
  }
  
  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--)
  {
    pt.remove(i);
  }
}

step 02-1 如果橫線化超過100 變紅色的橫線 不是 就是黑色的線








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);
  ellipse(ghostX,ghostY,15,15);
  
  strokeWeight(4);//線的粗度
  float dpx = 0, dpy = 0;//要看 p.x p2.x的差距 p.y p2.y的差距
  
  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);//type紅色的橫線
  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(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--)
  {
    pt.remove(i);
  }
}

stpe 02-2 直的畫 夠多會變藍色的直線







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);
  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);
  stroke(0); ellipse(ghostX,ghostY,15,15);
  
  strokeWeight(4);//線的粗度
  float dpx = 0, dpy = 0;//要看 p.x p2.x的差距 p.y p2.y的差距
  
  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);//type紅色的橫線
  else if (dpx<40 && dpy>100 ) stroke(0,0,255);//type2 藍色的直線
  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(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--)
  {
    pt.remove(i);
  }
}

step 02-3 當x 增加 y也增加的時候(往右下的斜線) 變綠色的線




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);
  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);
  stroke(0); ellipse(ghostX,ghostY,15,15);
  
  strokeWeight(4);//線的粗度
  float dpx = 0, dpy = 0;//要看 p.x p2.x的差距 p.y p2.y的差距
  int rightdown = 0;//往右下
  
  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++;
  }
  if ( dpx>100 && dpy<40 ) stroke(255,0,0);//type紅色的橫線
  else if (dpx<40 && dpy>100 ) stroke(0,0,255);//type2 藍色的直線
  else if (rightdown>30 ) stroke(0,255,0);//type3 前半段 往右下
  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(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--)
  {
    pt.remove(i);
  }
}

step 02-4 往右下的線 不用真的像上面40個點才能有綠色





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);
  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);
  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;//往右下
  
  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 ( dpx>100 && dpy<40 ) stroke(255,0,0);//type紅色的橫線
  else if (dpx<40 && dpy>100 ) stroke(0,0,255);//type2 藍色的直線
  else if (rightdown>150 ) stroke(0,255,0);//type3 前半段 往右下
  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(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--)
  {
    pt.remove(i);
  }
}

step 03-1 往右下的線 結合往右上的線 但正反的都會是綠色


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);
  //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);
  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 );
    ellipse(p.x,p.y, 10,10 );
    
    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);//type紅色的橫線
  else if (dpx<40 && dpy>100 ) stroke(0,0,255);//type2 藍色的直線
  else if (rightdown>150 ) stroke(0,255,0);//type3 前半段 往右下
  else if ( green_ok ) stroke(0,255,0);//type3 的前半段 往右下
  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(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--)
  {
    pt.remove(i);
  }
}


step 03-2 區分綠色線合起來的勾勾 往上和往下








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;
  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);
    dpy+=abs(p2.y-p.y);
    if(p2.x-p.x>0&&p2.y-p.y>0) rightdown +=sqrt(dpx*dpx+dpy*dpy);
    if(green_part1&&p2.x-p.x>0&&p2.y-p.y<0) green_rightup +=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;
  }
    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 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);   } }

step 03-3 橫線->紅色 直線->藍色 右上->黃色 右下->綠色











ArrayList<PVector>pt = new ArrayList<PVector>();
void setup(){
  size(400,400);
}
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;
  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;
  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(green_part1 && 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;
  }
  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);//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);
    
  }
}







沒有留言:

張貼留言