# Vectors¶

Vectors are represented as 3 word strings. All vectors in TorqueScript follow the X Y Z format. X axis being left/right, Y being forward/back and Z being up/down.

`vectorAdd`(%a, %b)

Adds vector %a to vector %b and returns the result.

```==> vectorAdd("-5 10 0","5 4 -2");
0 14 -2
```
`vectorSub`(%a, %b)

Subtracts vector %b from vector %a and returns the result. This is the same as adding the inverse of %b to %a.

`vectorDot`(%a, %b)

Performs a dot product between %a and %b and returns the result. This is the same as (%ax * %bx + %ay * %by + %az * %bz).

```==> vectorDot("5 3 4","4 3 5");
49
==> 5 * 4 + 3 * 3 + 4 * 5
49
```
`vectorCross`(%a, %b)

Returns the cross product of vector %a and vector %b.

`vectorDist`(%a, %b)

Returns the distance between vector %a and vector %b. This is the same as (mSqrt(mPow(%bx - %ax,2) + mPow(%by - %ay,2) + mPow(%bz - %az,2)));

`vectorLen`(%a)

Returns the length/magnitude of vector %a. This is the same as (mSqrt(mPow(%ax,2) + mPow(%ay,2) + mPow(%az,2)));

`vectorNormalize`(%a)

Returns the normalized/unit vector of vector %a. This is the same as (%a / vectorLen(%a));

## Examples¶

Getting the rotation between two points (by Truce):

```function rotBetween(%a,%b)
{
%v = vectorNormalize(vectorSub(%b,%a));
%x = getWord(%v,0);
%y = getWord(%v,1);
%yaw = mATan(%x,%y) - \$pi / 2;
%pitch = 0 - mATan(getWord(%v,2),mSqrt(%x * %x + %y * %y));
%xy = 0 - %pitch * 180 / \$pi;
%z = -90 - %yaw * 180 / \$pi;
return eulerToAxis(%xy SPC 0 SPC %z);
}
```