The Vector class is a toolkit of vector functions that is used by Mirage. They are accessed using the command Vector::<function_name>(a, b, c) e.g. Vector::sub(to, from, dir);
// Adds vectors a and b, stores the result in vector result // which may be one of a or b. static void add(vector a, vector b, vector result); // Add a fraction of vector a to vector b. //Stores result in b static void addfrac(double frac, vector a, vector b); // Subtracts vector b from vector a, stores the result in // vector result which may be one of a or b. static void sub(vector a, vector b, vector result); // Calculates the scalar dot product of two vectors a and b static double dot(vector a, vector b); // Sets vector a to equal vector b. static void set(vector a, vector b); // Assigns the given values to the vector a. static void assign(vector a, double xval, double yval, double zval); // Returns the magnitude of the vector a. static double magnitude(vector a); // Finds the minimum of two vectors on a value-by-value basis. // ie. result[X] = MIN(a[X], b[X]); // result[Y] = MIN(a[Y], b[Y]); // result[Z] = MIN(a[Z], b[Z]); inline static void min(vector a, vector b, vector result); // Finds the maximum of two vectors on a value-by-value basis. inline static void max(vector a, vector b, vector result); // Scales a vector a by the given scalar quantity s, stores //result in vector result. static void scale(double s, vector a, vector result); // Normalises a vector. // If the vector has length 0 this will cause an error. // set msg to be a useful string which can locate where the error // was caused when the error message is produced. // Error Message: // ``*** Divide by zero in <msg>, continuing... static void normalise(vector v, char *msg); // Cross product (a x b), stores result in result. static void cross(vector a, vector b, vector result); // Stretch a vector; same format as the object's stretch // routine. static void stretch(double x, double y, double z, vector v); // Shift a vector; same format as the object's shift routine. static void shift(double x, double y, double z, vector v); // Rotate a vector; same format as the object's rotate routine. static void rotate(axis from, axis to, double angle, vector v); // Rotate a vector; same format as the object's rotate routine. static void rotate(axis around, double angle, vector v); // Rotate a vector; same format as the object's rotate routine. static void rotate(vector given_fwd, vector given_up, vector v); // Shear a vector; same format as the object's shear routine. static void shear(axis from, axis to, double amount, vector v);