# CPSC310A Assignment 0 - Vector Math

## Due Monday January 23

### Details

Create C++ classes for three dimensional vectors and points. The Vector class should implement all of the functions used in the following code:

``````Vector v1(1.0f, 2.0f, 3.0f);
Vector v2(v1);
Vector v3 = v1;
v3 = v1 + v2;
v1 += v2;
v3 = v1 - v2;
v1 -= v2;
v3 = v2 * 2.0f;
v3 = 2.0f * v2;
v3 *= 2.0f;
v3 = v2 / 2.0f;
v3 /= 2.0f;
v3 = -v1;
v1 == v2;
cout << "v1.x: " << v1.x() << "\n";
cout << "v1.x: " << v1 << "\n";
v1.set_x(0.0f);
v1 = 0.0f;
cout << "dot product of v1 and v2: " << Vector::Dot(v1, v2) << "\n";
cout << "cross product of v1 and v2: " << Vector::Cross(v1, v2) << "\n";
cout << "length of v1: " << v1.Length() << "\n";
cout << "v1 normalized: " << v1.Normalize() << "\n";
``````

The Point class should implement all of the functions used in the following code:

``````Point p1(1.0f, 2.0f, 3.0f);
Point p2(p1);
Point p3 = p1;
Vector v1(p1);  // note: this should be in the vector class
cout << "p1: " << p1 << "\n";
p3 = p1 + v1;
p3 = v1 + p1; // note: this should be in the vector class
p3 += v1;
v1 = p1 - p2;
p3 = p1 - v1;
p3 -= v1;
p1 == p2;
cout << "p1.x: " << p1.x() << "\n";
cout << "p1.x: " << p1 << "\n";
p1.set_x(0.0f);
p1 = 0.0f;
cout << "distance from p1 to p2: " << Point::Distance(p1, p2) << "\n";
``````

To improve the efficency of your code all member functions that do not modify `this` should be accessor functions, and non-primative parameters should be constant references. The functions should perform input verification (divide by zero in `operator/` for example) using the `cassert` library.

### Submission

Tar your code in a file that contains your name and submit it on the course Inquire site.