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);
}