2016年3月17日 星期四

Week04 02132412_沈泓宇

模擬槍管發射子彈的程式:



程式碼:

import de.voidplus.leapmotion.*;
PVector pos = null,dir = null;
PVector []bullet = new PVector[10];
PVector []bullet_dir = new PVector[10];
int bulletNow = 0;
LeapMotion leap;

void setup(){
  size(600,400,P3D);
  leap = new LeapMotion(this);
  for(int i = 0;i < 10;i++){
    bullet[i] = new PVector(0,0,0);
    bullet_dir[i] = new PVector(0,0,0);
  }
}

void draw(){
  background(255);
  for(Hand hand : leap.getHands()){
    Finger finger_index = hand.getIndexFinger();
    finger_index.draw();
    dir = finger_index.getDirection();
  }
  lights();
  fill(255,0,0);
  translate(width/2,height/2);
  pushMatrix();
  for(int i = 0;i < 10;i++){
    if(dir != null)
    translate (dir.x*10*i,dir.y*10*i,dir.z*10*i);
    sphere(40);
  }
  popMatrix();
  fill(0,0,255);
  for(int i = 0;i < 10;i++){
    pushMatrix();
    translate(bullet[i].x,bullet[i].y,bullet[i].z);
    sphere(41);
    bullet[i].x += bullet[i].x;
    bullet[i].y += bullet[i].y;
    bullet[i].z += bullet[i].z;
    popMatrix();
  }
}

void keyPress(){
  bullet[bulletNow].x = 0;
  bullet[bulletNow].y = 0;
  bullet[bulletNow].z = 0;
  bullet_dir[bulletNow].x = dir.x * 5;
  bullet_dir[bulletNow].y = dir.y * 5;
  bullet_dir[bulletNow].z = dir.z * 5;
  bulletNow++;
  if(bulletNow >= 10){
    bulletNow = 0;
  }
}

然後就是打棒球的範例:


碰撞之後:


程式碼:

import de.voidplus.leapmotion.*;
LeapMotion leap;
PVector pos,dir,ball;
void setup(){
size(600,400,P3D);
leap = new LeapMotion(this);
pos = new PVector(300,200,0);
ball = new PVector(0,0,0);
}

void draw(){
  ball.x += 2;
  ball.y += 2;
  for(Hand hand : leap.getHands()){
    pos = hand.getPosition();
  }
  background(255);
  fill(255,0,0);
  pushMatrix();
  translate(pos.x,pos.y,pos.z);
  box(30,30,30);
  popMatrix();
  pushMatrix();
  translate(ball.x,ball.y);
  sphere(30);
  if(dist(ball.x,ball.y,pos.x,pos.y) < 30)
  background(255,0,0);
  popMatrix();
}


沒有留言:

張貼留言