#include #include #include #include "vector.h" using namespace std; double * Add (double *A, double *B) { double *C = new double[3]; C[0] = A[0]+B[0]; C[1] = A[1]+B[1]; C[2] = A[2]+B[2]; return C; } double * Subtract (double *A, double *B) { double *C = new double[3]; C[0] = A[0]-B[0]; C[1] = A[1]-B[1]; C[2] = A[2]-B[2]; return C; } double Dot (double *A, double *B) { return A[0]*B[0] + A[1]*B[1] + A[2]*B[2]; } double * ScaMult (double sca, double *A) { double *C = new double[3]; C[0] = sca*A[0]; C[1] = sca*A[1]; C[2] = sca*A[2]; return C; } double * Cross (double *A, double *B) { double *C = new double[3]; C[0] = A[1]*B[2]-A[2]*B[1]; C[1] = A[2]*B[0]-A[0]*B[2]; C[2] = A[0]*B[1]-A[1]*B[0]; return C; } double * Reflect (double *v, double *p1, double *p2, double *p3) { //computes and returns the reflected vector when vector v bounces off a //plane containing the points p1, p2, p3 double *vec1 = Subtract (p2,p1); double *vec2 = Subtract (p3,p1); double *n = Cross (vec1,vec2); delete[] vec1; delete[] vec2; double ns = Dot (n,n); double vn = Dot (v,n); double *P = ScaMult (2*vn/ns,n); double *R = Subtract (v,P); delete[] P; return R; }