//=============================================================================
#include "pointSet.h"

#include "matrix.h"
#include <math.h>

point3D
point3D::operator*( const matrix3x3 &m ) const
{
  return point3D(
    x_*m[0][0] + y_*m[1][0] + z_*m[2][0],
    x_*m[0][1] + y_*m[1][1] + z_*m[2][1],
    x_*m[0][2] + y_*m[1][2] + z_*m[2][2] );
}

float 
point3D::dot( const point3D &p ) const
{
  return x_*p.x_ + y_*p.y_ + z_*p.z_;
}

point3D
point3D::cross( const point3D &p ) const
{
  return point3D( y_*p.z_ - z_*p.y_,
		  z_*p.x_ - x_*p.z_,
		  x_*p.y_ - y_*p.x_ );
}

float 
point3D::length() const
{
  return sqrtf(x_*x_ + y_*y_ + z_*z_);
}

void 
pointSet2D::scaleAllXs( float scale )
{
  for ( int i=size()-1; i>=0; i-- )
    list_[i][X] *= scale;
}

void 
pointSet2D::scaleAllYs( float scale )
{
  for ( int i=size()-1; i>=0; i-- )
    list_[i][Y] *= scale;
}

void 
pointSet2D::offsetAllXs( float offset )
{
  for ( int i=size()-1; i>=0; i-- )
    list_[i][X] += offset;
}

void 
pointSet2D::offsetAllYs( float offset )
{
  for ( int i=size()-1; i>=0; i-- )
    list_[i][Y] += offset;
}
