顯示具有 01160130_許暐頡 標籤的文章。 顯示所有文章
顯示具有 01160130_許暐頡 標籤的文章。 顯示所有文章

2015年7月5日 星期日

期末作品展示





功能簡介:
   能夠偵測人的手臂,伸直為投出,縮回為新增一個球,用拋物線進行投籃



程式碼:
import kinect4WinSDK.Kinect; import kinect4WinSDK.SkeletonData; import ddf.minim.*; AudioPlayer player; Minim minim; Kinect kinect; ArrayList <SkeletonData> bodies; float ballX=900,ballY=600,ballVX=0,ballVY=0,ballFristX=500,ballFristY=600; float basketX = 50 , basketY = 100; float counflyX =0, counflyY = 0; float grade = 0; boolean flying=false,isflying=false,ifball=false; PVector v1,v2; float i=0,i1 = 0,x=30,G=0.98,ballmove; PImage Curry01,Curry02,net,imgBG; float timeCount=3000; float[] goal = new float [100]; boolean gamestart=false; boolean gameover=false; boolean loadgame=false; void setup(){ size(1000,700); kinect = new Kinect(this); smooth(); bodies = new ArrayList<SkeletonData>(); Curry01 = loadImage("curry01.jpg"); Curry02 = loadImage("curry02.jpg"); net = loadImage("basketnet.jpg"); // minim = new Minim(this); //player = minim.loadFile("NBA.mp3", 2048); imgBG = loadImage("NBA.jpg"); } void draw(){ //background(255); println(gamestart,gameover); if(gamestart){ gameStart(); scoreShow(); } else{ textSize(20); fill(250, 160, 0); text("Wave to Start!",450,300); } for (int i=0; i<bodies.size (); i++) { drawSkeleton(bodies.get(i)); drawPosition(bodies.get(i)); } } void scoreShow(){ if(gameover){ fill(0); rect(-10,-10,1100,800); textSize(30); fill(250, 160, 0); text("Your Score: "+grade, 450, 300); } else{ textSize(10); fill(240, 220, 0); text("Your Score: "+grade, 10, 350); } } void gameStart(){ //player.play(); image(imgBG ,0,0,1000,700); image(net, 50, 200); image(Curry01, ballX, 600); fill(200,80,80); ellipse(ballX,ballY,50,50); textSize(30); float time = timeCount/100 ; text("Time"+ time ,500,100); timeCount--; if(timeCount<0) { gamestart = false; gameover= true; //player.close(); //minim.stop(); super.stop(); } if(ballX>97 && ballX<173 && ballY<275 && ballY>225 ){ grade++; } text("Score : "+grade , 500,150); if(flying==true){ ballX+=ballVX; ballY+=ballVY; ballY+=G; i++; if(i>5) isflying = true; } if(isflying){ ballX+=counflyX; ballY=ballY+counflyY; counflyY+=G; i1++; if(i1>200){ counflyX =0 ; counflyY = 0; i1 = 0; } } } void mouseClicked() { if(gameover==true&&gamestart==false){ grade=0; gameover=false; frameCount=0; setup(); redraw(); gamestart=true; } if(gamestart==false){ gamestart=true; } } void JudgeFlying(SkeletonData _s, int _j1,int _j2, int _j3){ if(gamestart==false){ gamestart=true; } v1=PVector.sub(_s.skeletonPositions[_j3],_s.skeletonPositions[_j2]); v2=PVector.sub(_s.skeletonPositions[_j2],_s.skeletonPositions[_j1]); ballVX = (_s.skeletonPositions[_j2].x-_s.skeletonPositions[_j3].x); ballVY = (_s.skeletonPositions[_j2].y-_s.skeletonPositions[_j3].y); float angle=degrees(PVector.angleBetween(v1, v2)); if(angle>=0 && angle<=0.07 &&ballVX<0.3&&ballVY<0.3/*&& isflying == false*/){ image(Curry02,900, 600); if(i<=5){ flying=true; float len=mag(ballVX, ballVY); ballVX = ballVX/len*x; ballVY = ballVY/len*x*1.2; if(i==5){ counflyY = ballVY; counflyX = ballVX; float len2=mag(counflyX,counflyY); counflyX = counflyX/len2*x; counflyY = counflyY/len2*x*1.2; } } } else if (angle <= 180&& angle >= 175 ){ image(Curry01, 900, 600); i=0; i1=0; ballX=900; ballY=600; counflyX =0 ; counflyY = 0; } } void mouseDragged(){ ballX=mouseX; ballY=mouseY; } void mousePressed(){ flying=false; } void drawPosition(SkeletonData _s) { noStroke(); fill(0, 100, 255); String s1 = str(_s.dwTrackingID); } void drawSkeleton(SkeletonData _s) { JudgeFlying(_s, Kinect.NUI_SKELETON_POSITION_WRIST_RIGHT, Kinect.NUI_SKELETON_POSITION_ELBOW_RIGHT, Kinect.NUI_SKELETON_POSITION_SHOULDER_RIGHT ); } void appearEvent(SkeletonData _s) { if (_s.trackingState == Kinect.NUI_SKELETON_NOT_TRACKED) { return; } synchronized(bodies) { bodies.add(_s); } } void disappearEvent(SkeletonData _s) { synchronized(bodies) { for (int i=bodies.size ()-1; i>=0; i--) { if (_s.dwTrackingID == bodies.get(i).dwTrackingID) { bodies.remove(i); } } } } void moveEvent(SkeletonData _b, SkeletonData _a) { if (_a.trackingState == Kinect.NUI_SKELETON_NOT_TRACKED) { return; } synchronized(bodies) { for (int i=bodies.size ()-1; i>=0; i--) { if (_b.dwTrackingID == bodies.get(i).dwTrackingID) { bodies.get(i).copy(_a); break; } } } }

2015年5月25日 星期一

WEEK14

程式碼:




PImage imgCar;
float angle =0,dx=0,dy=0,vel=1;
void setup(){
  size(800,600,P3D);
  imgCar = loadImage("lambo.png");
}
void draw(){
  background(255);
  for(int i =-1;i<=8;i++){
    for(int j=-1;j<=6;j++){
      rect(i*100+dx%100,j*100+dy%100,100,100);
    }
  }
  pushMatrix();
    translate(width/2, height/2);
    rotateZ(angle);
    image(imgCar, -100,-100,200,200);
  popMatrix();
  dx=-vel*cos(angle);
  dy=-vel*sin(angle);
}
void mouseMoved(){
  int x=mouseX-pmouseX;
  int y=mouseY-pmouseY;
  if(x>0) angle+=1/40.0;
  if(x<0) angle-=1/40.0;
}
void keyPressed(){
  if(key=='l')angle++;
  if(key=='r')angle--;
  if(keyCode==UP)vel*=1.1;
  if(keyCode==DOWN)vel*=0.9;
}

2015年5月18日 星期一

week 13


//程式碼1

import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
   float X,Y,VX,VY;
  Fruit(float x ,float y , float vx , float vy){
   X=x ; Y=y; VX=vx; VY=vy;
  } 

void draw(){
   ellipse(X,Y,50,50); 
}
void update(){
   X+=VX;
  Y+=VY;
 VY+=1.98;
if(X<-100 || X>740 || Y<-100||Y>580){
 X=random(640);
 Y=random(240);
 VX=random(30)-15;
 VY=-random(30);
}
}
Fruit fruit[] = new Fruit[20];
void setup(){
   size(640,480);
   openni = new SimpleOpenNI(this);
   openni.enableDepth();
   openni.enableUser(); 
  for(int i=0;i<20;i++){
     fruit[i] = new Fruit(random(640),random(240),random(30)-15,-random(30)); 
  }
}
void draw(){
   openni.update();
   image(openni.userImage(),0,0);
  for(int i=0;i<20;i++){
     fruit[i].draw();
     fruit[i].update();
  } 
}


//程式碼2
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
   float X,Y,VX,VY;
   boolean dead = false;
  Fruit(float x ,float y , float vx , float vy){
   X=x ; Y=y; VX=vx; VY=vy; dead = false;
  } 

void draw(){
  if(dead) fill(255,0,0);
  else fill(255);
   ellipse(X,Y,50,50); 
}
void update(){
   X+=VX;
  Y+=VY;
 VY+=1.98;
if(X<-100 || X>740 || Y<-100||Y>580){
 X=random(640);
 Y=random(240);
 VX=random(30)-15;
 VY=-random(30);
if(dist(X,Y,mouseX,mouseY)<50) dead = true;
if(X>0&& X<640 && Y>0 && Y<480 && openni.userImage().pixels[int(X)+int(Y)*640]==color(0,0,255)) dead = true;
}
}
void mouseMoved(){
   strokeWeight(30); stroke(255,0,0);line(mouseX ,mouseY,pmouseX , pmouseY);
   strokeWeight(1);stroke(0);
}
Fruit fruit[] = new Fruit[20];
void setup(){
   size(640,480);
   openni = new SimpleOpenNI(this);
   openni.enableDepth();
   openni.enableUser(); 
  for(int i=0;i<20;i++){
     fruit[i] = new Fruit(random(640),random(240),random(30)-15,-random(30)); 
  }
}
void draw(){
   openni.update();
   image(openni.userImage(),0,0);
  for(int i=0;i<20;i++){
     fruit[i].draw();
     fruit[i].update();
  } 
}

//程式碼3

2015年5月11日 星期一

Week 12


0. 下載今天上課要用到的軟體
0.1. Kinect SDK 1.8
0.2. Processing 2.2.1 32bit
0.3. SimpleOpenNI
0.4. FAAST
0.5. 老師雲端硬碟的下載網址
https://drive.google.com/folderview?id=0ByYbu0zjxrp1flNibGlDMldkWlBqWWtGeGhlQVU4dzBORmNXblBJeWFjWXVWbVVFUTF0Nmc&usp=sharing
(註: 因為檔案很大, 在銘傳大學S405教室可以設定Proxy ( 120.96.81.32:3128 )會快一點
OR 120.125.70.53

//程式碼
import SimpleOpenNI.*;
SimpleOpenNI openni;
void setup(){
   size(640,480);
  openni = new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
}
void draw(){
    background(255);
    openni.update();
    image(openni.userImage() , 0 , 0,640,480);

    int [] userList = openni.getUsers();
    for(int i=0; i<userList.length;i++)
    {
      PVector pos = new PVector();
    openni.getJointPositionSkeleton(userList[i] , SimpleOpenNI.SKEL_LEFT_HIP,pos);
    println(pos);
    println(userList[i]);
    }
}

void onNewUser(SimpleOpenNI curContext, int userId)
{
 curContext.startTrackingSkeleton(userId);
}



import SimpleOpenNI.*;
SimpleOpenNI openni;
PImage imgBG , imgMask ;
void setup(){
   size(1024 , 640);
  openni = new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
  imgBG = loadImage("00.jpg");
  imgMask = createImage(1024 , 640 , ARGB);
  imgMask.loadPixels();
  for(int i=0 ; i <1024*640 ; i++){
    imgMask.pixels[i] = color(0,0,255,220);
  }
  imgMask.updatePixels();
}
void draw(){
    //background(255);
    image(imgBG ,0,0);
    println(frameCount);
    openni.update();
    image(openni.userImage() , 0 , 0,640,480);
    image(imgMask,0,0);
    int [] userList = openni.getUsers();
    for(int i=0; i<userList.length;i++)
    {
      PVector pos = new PVector();
    openni.getJointPositionSkeleton(userList[i] , SimpleOpenNI.SKEL_LEFT_HIP,pos);
    println(pos);
    println(userList[i]);
    }
}

void onNewUser(SimpleOpenNI curContext, int userId)
{
 curContext.startTrackingSkeleton(userId);
}



//第三個程式碼(電腦無法執行了)
import SimpleOpenNI.*;
SimpleOpenNI openni;
PImage imgBG  ;
PGraphics  imgMask;
void setup(){
   size(1024 , 640,P3D);
  openni = new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
  imgBG = loadImage("00.jpg");
  imgMask = createGraphics(640,480);
  imgMask.beginDraw();
  imgMask.background(0);
  imgMask.endDraw();
}
void draw(){
    //background(255);
    imgBG.mask(imgMask);
    image(imgBG ,0,0);
    println(frameCount);
    openni.update();
    image(openni.userImage() , 0 , 0,64,48);
    //image(imgMask,0,0);
    int [] userList = openni.getUsers();
    imgMask.beginDraw();
    imgMask.noStroke();
    imgMask.fill(255);
    for(int i=0; i<userList.length;i++)
   
      {
      if(openni.isTrackingSkeleton(userList[i])){
        PVector pos = new PVector();
        openni.getJointPositionSkeleton(userList[i] , SimpleOpenNI.SKEL_LEFT_HIP,pos);
        println(pos);
        println(userList[i]);
    }
}
    imgMask.endDraw();
}
void onNewUser(SimpleOpenNI curContext, int userId)
{
 curContext.startTrackingSkeleton(userId);
}

2015年3月9日 星期一

week03 hw1










//程式碼01
import de.voidplus.leapmotion.*;
LeapMotion leap;

void setup() {
  size(800, 600, P3D);
  leap = new LeapMotion(this);
}

void draw() {
  background(255);
  for (Hand hand : leap.getHands ())
  {

    println("yaw:"+hand.getYaw());
    pushMatrix();
    translate(300,300);
    rotateY(hand.getYaw()*0.1);
    box(100);
    popMatrix();
    
    
    
    hand.draw();
     myDraw(hand.getPosition());
     myDraw(hand.getThumb().getPosition());
     myDraw(hand.getIndexFinger().getPosition());
     myDraw(hand.getMiddleFinger().getPosition());
     myDraw(hand.getRingFinger().getPosition());
     myDraw(hand.getPinkyFinger().getPosition());
     
  }
}
  void myDraw(PVector pos)
  {
    pushMatrix();
     translate(pos.x,pos.y);
     fill(255,0,0);
     sphere(20);
     popMatrix();
  }


//程式碼02
import de.voidplus.leapmotion.*;
LeapMotion leap;
PImage img0 , img2 , img5;
void setup(){
  
  size (600,600,P3D);
  leap = new LeapMotion(this);
  img0 = loadImage("img0.jpg");
  img2 = loadImage("img2.jpg");
  img5 = loadImage("img5.jpg");
}
void draw () {
  background(255);
  println(leap.getHands().size());
  fill(255,0,0);
  textSize(40);
  for(Hand hand : leap.getHands()){
    int n = hand.getOutstrechtedFingers().size();
    
    if(hand.isRight()){
      if(n==0)image(img0,400,300);
      else if(n<=2)image(img2 , 400 , 300);
      else image(img5,400 , 300);
    }
    else
      if(n==0)image(img0,200,300);
      else if(n<=2)image(img2 , 200 , 300);
      else image(img5,200 , 300);
      text("right:"+hand.getOutstrechtedFingers().size(),400,300);
    }
    //else text("left:"+hand.getOutstrechtedFingers().size(),200,300);
  
}