Brian Chia
       
 
categories
actionscript
actionscript 1.0
actionscript 2.0
misc
 
processing
 
links
brian chia
kelvin zhao
ronald leong
 
 
Two Dimensions Vectors
 
Adapted from Robert Penner's Vector Class and change it into a AS2.0 Class file. Some of the changes included changing the original getLength(), setLength(), getAngle(), setAngle() methods into a class properties (vLength & angle).

Download Vector Class sample

//create new Vector instance
var position:Vector = new Vector(5,5);
trace(position.vx); //output: 5
trace(position.vy); //output: 5

//trace Vector object using toSting() method
trace(position); //output: [5,5]

//reset Vector instance
position.reset(2,3);
trace(position); //output: [2,3]

//copy Vector instance and return a new Vector instance
var velocity:Vector=position.clone();
trace(velocity); //output: [2,3]

//compare if 2 vector instances value are identical
trace(position.equal(velocity)); //output: true

//perform vector addition
position.plus(velocity);
trace(position); //output: [4,6]

//perform vector addition and return new vector instance
var newPosition:Vector = position.plusNew(velocity);
trace(newPosition); //output: [6,9]

//perform vector subtraction
position.minus(velocity);
trace(position); //output: [2,3]

//perform vector subtraction and return new vector instance
var newPosition:Vector = position.minusNew(velocity);
trace(newPosition); //output: [0,0]

//reverse vector direction
velocity.reverse();
trace(velocity); //outpit: [-2,-3]

//reverse vector direction and return new vector instane
var dirction:Vector = velocity.reverseNew();
trace(direction); //output: [2,3]

//scale vector
var force:Vector=new Vector(3,2);
force.scale(2);
trace(force); //output: [6,4]

//scale vector and return new vector instance
var gForce:Vector=force.scaleNew(-.5);
trace(gForce); //output: [-3,-2]

//get magnitude (speed/absolute value/norm) of vector in scalar quantity
var speed:Number=velocity.vLength;
trace(speed); //output: 3.60555127546399

//set magnitude of vector in vector quantity
velocity.vLength=10;
trace(velocity); //output: [-5.54700196225229,-8.32050294337844]

//calculates vector angle
position.reset(5,5);
var bearing:Number=position.angle;
trace(bearing); //output: 45

//change vector angle
position.angle=180;
trace(position); //output: [-7.07106781186548,8.65927457071936e-16]

//rotate vector
position.reset(5,5);
position.rotate(-90);
trace(position); //output: [-5,5]

//rotate vector and return new vector instance
var newDirection:Vector=position.rotateNew(90);
trace(newDirection); //output: [5,5]

//perform vectors multiplication in scalar quantity
var forceA:Vector=new Vector(2,3);
var forceB:Vector=new Vector(4,5);
trace(forceA.dot(forceB)); //output: 23

//find the normal to the vector
var wForce:Vector=gForce.normalNew();
trace(gForce); //output: [-3,-2]
trace(wForce); //output: [2,-3]

//check for perpendicularity between 2 vectors
var goLeft:Vector=new Vector(3,0);
var goLeftNew:Vector=new Vector(5,0);
trace(goLeft.isPerp(goLeftNew)); //output: false
var goUp:Vector=new Vector(0,8);
trace(goLeft.isPerp(goUp)); //output: true

//calculate the angle between 2 vectors
var theta:Number=forceA.angleBetween(forceB);
trace(theta); //output: 4.96974072811023

For more explanation on the Vector Class, their usage and derivation, refer to Robert Penner's Programming Macromedia Flash MX.

suggestion

 
 
 
         
  © copyright 2007 THINKLUNATIC.    
Brian Chia Jonathan Ng