

#include <math.h>

#include "vector.h"




//---- vector_length

double vector_length( double x, double y, double z )
{
  return sqrt( x*x + y*y + z*z );
}





//---- vector_normalise

void vector_normalise(double *x, double *y, double *z)
{
  double d = sqrt( *x * *x + *y * *y + *z * *z );

  d = 1.0 / d;

  *x *= d;
  *y *= d;
  *z *= d;
}





//---- vector_normalise

void vector_normalise( double *x, double *y, double *z, double length )
{
  double d = sqrt(*x**x+*y**y+*z**z);
  if( d <= 0 ) return;
  d = length / d;
  *x *= d;
  *y *= d;
  *z *= d;
}





//---- vector_cross

void vector_cross(double *x, double *y, double *z, double ax, double ay, double az, double bx, double by, double bz)
{
  *x = ay*bz - az*by;
  *y = az*bx - ax*bz;
  *z = ax*by - ay*bx;
}



//---- vector_rotate_x

void vector_rotate_x( double *x, double *y, double *z, double angle )
{
  double s = sin(angle*2.0*3.1415926), c = cos(angle*2.0*3.1415926);

  double ny = *y * c - *z * s;
         *z = *y * s + *z * c;

  *y = ny;
}



//---- vector_rotate_y

void vector_rotate_y( double *x, double *y, double *z, double angle )
{
  double s = sin(angle*2.0*3.1415926), c = cos(angle*2.0*3.1415926);

  double nx = *x * c - *z * s;
         *z = *x * s + *z * c;
  
  *x = nx;
}



//---- vector_rotate_z

void vector_rotate_z( double *x, double *y, double *z, double angle )
{
  double s = sin(angle*2.0*3.1415926), c = cos(angle*2.0*3.1415926);

  double nx = *x * c - *y * s;
         *y = *x * s + *y * c;
  
  *x = nx;
}



