# Math library¶

The math library falls into two categories: vector math and computational
geometry. All of the following functionality is present inside the
`Kriti::Math`

namespace, and as such this will be dropped from the
descriptions for brevity.

## Vector math¶

TODO: fill out

There are several useful classes in the vector math library. The first, and
most-oft-used, is `Vector`

. This represents a three-dimensional vector, and
has overloaded operators for most common operations. Other member functions
that may be of interest are `length()`

, `length2()`

, `cross()`

,
`dot()`

, `projectOnto()`

, and the `toString()`

function. Individual
components are accessible by `vector.x()`

etc. as well as `vector[1]`

.

There is also a `Point`

class, which inherits from `Vector`

. This is
intended for use in places where you distinctly have a location in 3D space as
opposed to a difference between locations. Due to the inheritance, a `Point`

can be used anywhere a `Vector`

can, but not vice-versa.

The `Matrix`

class represents a standard 4x4 matrix, stored in column-major
ordering internally. Components are accessible by `matrix(0, 3)`

, which
accesses the last element in the first column. Note that the `Matrix`

class
has overloaded operators, and in particular the `Matrix * Point`

operator
behaves differently than the `Matrix * Vector`

operator.

Finally, the `Quaternion`

class is present, providing a full library for
the use of unit quaternions for representing rotations. Useful functionality
is present in the overloaded operators, the `toMatrix()`

function, and the
`slerp()`

function. The constructor takes an axis vector and an angle to use
to represent the initial rotation.

TODO: add view calculation etc.

## Computational geometry¶

The computational geometry library is currently not yet complete and includes basic 2D geometry functionality, such as:

`Geometry::closestPoint`

: finds the closest point on a line to another point`p`

.`Geometry::closestSegmentPoint`

: finds the closest point on a line segment to another point`p`

.`Geometry::intersectAARect`

: calculates the intersection of two axis-aligned rectangles and returns another axis-aligned rectangle.

TODO: finish filling out