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);
}
}
沒有留言:
張貼留言