#ifndef VECTOR_H #define VECTOR_H /* instead of doing 2 v3_mag, save sqrt ops return -1 if 1>2, 0 eq, 1 if 2>1 */ int v3_v1Compv2(double v1[3], double v2[3]); double v3_sin_bw2v( double v1[3], double v2[3]); double v3_cos_bw2v(double v1[3], double v2[3]); double v3_magnitude(double v[3]); void v3_assign(double vTo[3], double vFrom[3]); void v3_assign(double vTo[3], double x, double y, double z); double *v3_assign(double vFrom[3]); void v3_crossp(double v1[3], double v2[3], double vres[3]); double *v3_crossp(double v1[3], double v2[3]); void v3_dotp(double v1[3], double v2[3], double &a); double v3_dotp(double v1[3], double v2[3]); /* vect vprod[3] = v[3] * s */ void v3_scale(double v[3], double s, double vprod[3]); double *v3_scale(double v[3], double s); void v3_add(double v1[3], double v2[3], double vres[3]); double *v3_add(double v1[3], double v2[3]); void v3_sub(double v1[3], double v2[3], double vres[3]); double *v3_sub(double v1[3], double v2[3]); /* in case of tiny mag, make the vect 0 */ void v3_normalize(double v[3], double v_unit[3]); double *v3_normalize(double v[3]); // for 4-d vectors void v4_scale(double v[4], double s, double vprod[4]); void v4_add(double v1[4], double v2[4], double vres[4]); void v4_sub(double v1[4], double v2[4], double vres[4]); void v4_assign(double vTo[4], double vFrom[4]); void v4_assign(double vTo[3], double x, double y, double z, double w); void v4_set(double vTo[4], double c); // set vect to a const void v4_normalize(double v[4], double v_unit[4]); /* in case of tiny mag, make the vect 0 */ // vector v2 = glmat * v1, glmat is a col major mat void glmat44_mult_vec41(double *mat, double *v1, double *v2); // vector v2 = mat * v1, mat is regular row major void mat44_mult_vec41(double *mat, double *v1, double *v2); #endif