A vector is a mathematical object that has both magnitude (a numeric value) and direction. Velocity is a vector because it has both magnitude and direction. For example, a velocity of 33 kilometers per hour (kph) southeast has a magnitude of 33 and a direction of southeast. Speed is not a vector, and direction is not a vector, but speed and direction together, modifying the same object, form a vector. Here are some other examples of vectors.
Graphically, a vector is usually represented as an arrow (in other words, if you had to show a vector in a graph, that's how you'd sketch it). Mathematically, a vector's direction is often specified by an angle. To use the example given above, "33 kph southeast" may alternatively be described as "33 kph at 45 degrees."
In Flash, vectors are used primarily with physics applications. This is because multiple vectors (of the same type) can be added together to form one resultant vector. Adding vectors is called superposition. For example, if a balloon is floating in the air, several forces are being exerted on it simultaneously, such as force from the wind, gravitational force, and a buoyant force (that is, the force that is pushing the balloon up). With three forces acting on one balloon, it might be difficult to figure out what the balloon will do. Will it rise or will it fall? Using superposition, you can add the vectors together to find the resultant vector (and determine the balloon's next move). One vector is much easier to work with than three.
Vectors can be divided up into x and y components (in this context, the word components refers to pieces). This is called resolving a vector. You already did this same thing in the "Projection" section. Resolving a vector is nothing more than projecting it along the coordinate system axes. To add vectors together, you must
Let's use the example we started above. Imagine a balloon in the air with three forces acting on it:
To add the vectors together (looking back at our three-step checklist above), the first step is to resolve each vector into its components.
//Gravitational force angle1 = 90; magnitude1 = 10; //Buoyant force angle2 = 270; magnitude2 = 8; //Wind force angle3 = 45; magnitude3 = 5; //Resolve the vectors into their components x1 = magnitude1*Math.cos(angle1*Math.PI/180); y1 = magnitude1*Math.sin(angle1*Math.PI/180); x2 = magnitude2*Math.cos(angle2*Math.PI/180); y2 = magnitude2*Math.sin(angle2*Math.PI/180); x3 = magnitude3*Math.cos(angle3*Math.PI/180); y3 = magnitude3*Math.sin(angle3*Math.PI/180);
Notice the Math.PI/180 factor in each line of ActionScript above. Remember that the trigonometric functions only work with angles measured in radians. This factor converts the angle from degrees to radians.
The next two steps are to add all of the x components and y components together to form two resultant vectors:
//Add the x pieces x = x1 + x2 + x3; //Add the y pieces y = y1 + y2 + y3;
You now have the sum of all the forces in the x direction and the sum of all the forces in the y direction. Add these two lines of ActionScript to display the result in the output window:
trace("Force in the x direction="+x); trace("Force in the y direction="+y);
When you test the SWF file, you will see that the force in the y direction is 1.53. Since this number is greater than 0, the balloon will be forced to move toward the ground. The force in the x direction is 3.53. This means that the balloon will be forced to move to the right.
With the concepts and techniques in this chapter, you are adding practical skills to your programming toolkit. You will find that these things will come in handy frequently. We will revisit vectors and explore more examples of vector uses in the chapters on physics and collision reactions.