Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
PVector vec1 = new PVector(1,2);
PVector vec2 = new PVector(3,4);
 
// read out components of vec1 
println(vec1.x);
println(vec1.y);
println(vec1.z);
 
println(vec1);
println(vec2);
 
// set new components of vector
vec1.set(10,20);
println(vec1);
 
// vector addition when creating a new vector
println("-- Vec Add --");
PVector resVec = PVector.add(vec1,vec2);
println(resVec);
 
// adding a vector to an existing vector  
vec1.add(vec2);
println(vec1);
 
// vector subtraction  
println("-- Vec Sub --");
resVec = PVector.sub(vec1,vec2);
println(resVec);
 
vec1.sub(vec2);
println(vec1);
 
// vector multiplication   
println("-- Vec Mult --");
resVec = PVector.mult(vec1,2);
println(resVec);
 
vec1.mult(2);
println(vec1);
 
// find vector magnitude    
println("-- Vec Length --");
println(vec1.mag());
 
// find angle between two vectors    
println("-- Vec Angle Between --");
println(degrees(PVector.angleBetween(vec1, vec2)));
 
// normalise a vector    
println("-- Vec Normalise --");
vec1.normalize();
println(vec1);
println(vec1.mag());


Example 1: Gravity 

Here we use vectors to create a force of attraction. The force's effect is accumulative, always adding to the velocity of our ellipse. 

Code Block
PVector pos = new PVector(200,200);
PVector velocity = new PVector(1,0);

void setup() {
  size(600,600);
  fill(255);
}

void draw() {
  background(0);
  PVector direction = new PVector(mouseX, mouseY); 
  direction.sub(pos);  // by subtracting the pos from mouse coordinates, we end up with a vector between the two points
  //
  direction.normalize(); // now we have a vector with the length of 1, this tells us the direction we want to push out ellipse in
  direction.mult(.1); // we shorten the vector (magnitude), this gives us our speed
  velocity.add(direction); //we add the direction to our velocity, so the changes accumulate over time
  pos.add(velocity); // pos + velocity give us our new position!
  ellipse(pos.x, pos.y,30,30);
};


Example 2: Bouncy ball  

Here we use vectors to simulate the effect of bouncing. 

Code Block
PVector pos = new PVector(200,200);
PVector velocity = new PVector(1,0);
float damper = 0.99;

void setup() {
  size(600,600);
  fill(255);
}

void draw() {
  background(0);
 
  velocity.mult(damper); // always slow the ball down to simulate resistance 
  pos.add(velocity); // pos + velocity give us our new position! 
   
  // if the ball is above or below the screen, invert the y value of the velocity to send it back where it came from
  if (pos.y<0 || pos.y>height) {
    velocity.y = -velocity.y;
    pos.add(velocity);
  }
   // if the ball is left or right of the screen, invert the x value
  if (pos.x<0 || pos.x>width) {
    velocity.x = -velocity.x;
    pos.add(velocity);
  }
  ellipse(pos.x, pos.y,30,30);
  
  if(mousePressed) {
     // show us our "line of power"
     stroke(255,0,0);
     line(pos.x,pos.y, mouseX,mouseY);
     noStroke();
  }
};

void mouseReleased() {
    // when the mouse is released we give a ball a big push 
    PVector direction = new PVector(mouseX, mouseY);  
    direction.sub(pos);  // by subtracting the pos from mouse coordinates, we end up with a vectore between the two points
    direction.mult(.2);  // we shorten the magnitude to reduce the power of the push
    velocity.set(direction); //now we have our new velocity 
};


Example 3: Car follower  

The physics of a car a very different to a planet or a bouncy ball, yet most of the parameters are the same. 

Code Block
PVector pos = new PVector(200,200);
PVector velocity = new PVector(1,0);