## Appendix A. Vector Operations

This appendix implements a class called *Vector* that encapsulates
all of the vector operations that you need when writing 2D or 3D rigid body simulations.
Although, *Vector* represents 3D vectors, you can easily reduce it to
handle 2D vectors by eliminating all of the z-terms or
simply constraining the z-terms to zero where
appropriate in your implementation.

## Vector Class

The *Vector* class is defined with three components, x, y, and z, along with several methods and operators that implement
basic vector operations. The class has two constructors, one of which initializes the
vector components to zero and the other of which initializes the vector components to
those passed to the constructor.

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Vector Class and vector functions // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - class Vector { public: float x; float y; float z; Vector(void); Vector(float xi, float yi, float zi); float Magnitude(void); void Normalize(void); void Reverse(void); Vector& operator+=(Vector u); Vector& operator-=(Vector u); Vector& operator*=(float s); Vector& operator/=(float s); Vector operator-(void); }; // Constructor inline Vector::Vector(void) { x = 0; y = 0; z = 0; } // Constructor inline Vector::Vector(float xi, float yi, float zi) { x = xi; y = yi; z = zi; }

## Magnitude

The *Magnitude* method simply calculates the scalar magnitude of the vector according to the formula ...

Get *AI for Game Developers* now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.