/*
 * Jeffrey Ladino - jnl22@ccs.neu.edu
 *
 * File: matrix3d.cpp
 *
 * Change Log
 ************
 ** July 24, 1999 - Jeff Ladino
 * Created.
 *
 */

#include "vector3d.h"
#include <assert.h>
#include <stdio.h>

//
// Constructors
//
vector3d::vector3d(){
  for(int i=0;i<3;i++) data[i]=0.0;
}

vector3d::vector3d(const vector3d& source){
  for(int i=0;i < 3; i++) 
    data[i] = source.data[i];
}

// Destructor (default)


// Accessor
Real& vector3d::operator[](unsigned index){
  assert((index<3));
  return *(data + index);
}

/* mag_sq
 *
 * returns the magnitude of the vector squared
 */
Real vector3d::mag_sq(){
  return data[0]*data[0] + data[1]*data[1];
}

/* add 
*/
vector3d& vector3d::operator+(vector3d& v1){
  vector3d *result = new vector3d;
  for(int i=0;i < 3; i++) 
    result->data[i] = data[i] + v1[i];
  return *result;
}

/* subtract
*/
vector3d& vector3d::operator-(vector3d& v1){
  vector3d *result = new vector3d;
  for(int i=0;i < 3; i++) 
    result->data[i] = data[i] - v1[i];
  return *result;
}

/* scalar multiply
*/
vector3d& vector3d::operator*(Real scalar){
  vector3d *result = new vector3d;
  for(int i=0;i < 3; i++) 
    result->data[i] = data[i] * scalar;
  return *result;
}

/* dot product
*/
Real vector3d::operator*(vector3d& v1){
  Real result;
  result = data[0]*v1[0] + data[1]*v1[1];
  return result;
}

/* print vector3d
 */
void vector3d::print(){
  printf("(%e,%e,%e)\n", data[0], data[1], data[2]);
}


