# FUNCTION

# Public

# CREATE-ROTATION-FROM-VIEW (VIEW WORLD-UP &OPTIONAL (SIZE (LENGTH VIEW)))

Given a direction to look in (VIEW), and the direction that is
'upwards' in a given coordinate system, this function creates a
rotation matrix to translate into that coordinate system. This
matrix should be post multiplied by any vectors. The matrix is
defined using a left-handed coordinate system.

# CREATE-ROTATION-FROM-VIEW-TO-VIEW (FROM-VIEW TO-VIEW WORLD-UP)

Creates a rotation matrix that will rotate the vector FROM-VIEW on
to the vector TO-VIEW, using WORLD-UP as the coordinate system's
'upward' direction. This matrix should be post-multiplied by any
vectors.

# CREATE-ROTATION-MATRIX (VIEW RIGHT UP &OPTIONAL (SIZE 3))

Creates a rotation matrix from three vectors. VIEW is the direction
that the object should be pointing along, UP is the direction
upwards. RIGHT is the vector orthogonal to this.

# MAKE-IDENTITY (SIZE)

Creates an size x size identity matrix.

# MAKE-MATRIX (ROWS COLS &KEY INITIAL-ELEMENTS)

Creates a matrix of the given dimensions.

# MAKE-VECTOR (DIM &KEY INITIAL-ELEMENTS)

Create a vector of the given dimensions.

# PITCH-MATRIX (SIZE ANGLE)

Creates a matrix that rotates around the x-axis by the given angle,
given in radians. This is a left-handed rotation.

# ROLL-MATRIX (SIZE ANGLE)

Creates a matrix that rotates around the z-axis by the given angle,
in radians. This is a left-handed rotation.

# VECTOR (&REST ELEMENTS)

Create a vector.

# YAW-MATRIX (SIZE ANGLE)

Creates a matrix that rotates around the y-axis by the given angle,
given in radians. This is a left-handed rotation

# Undocumented

# * (&REST ITEMS)

# + (&REST ITEMS)

# - (&REST ITEMS)

# / (&REST ITEMS)

# TO-DEGREES (RADIANS)

# TO-RADIANS (DEGREES)

# MACRO

# Public

# DO-EACH-MATRIX-ELEMENT ((SYMBOL MATRIX &OPTIONAL ROW-INDEX-SYMBOL COL-INDEX-SYMBOL) &BODY BODY)

Iterates over each of the matrix elements, row by row.

# DO-EACH-VECTOR-ELEMENT ((ELEMENT VECTOR &KEY (INDEX-SYMBOL NIL)) &BODY BODY)

Iterates over elements in a vector.

# Undocumented

# DO-EACH-MATRIX-ELEMENT-2 ((LHS-SYMBOL RHS-SYMBOL LHS-MATRIX RHS-MATRIX &KEY (TRANSPOSE-RHS T)) &BODY BODY)

# Private

# CREATE-LIST-OPERATION-METHOD (NAME FUNCTION)

Generates a method, such as c+, which operates on common lisp
lists, treating them as if they were vectors.

# CREATE-VECTOR-OPERATION-METHOD (NAME FUNCTION)

Expands into code that can be used to fill out one a method for one
of the generic methods defined below, such as c+

# FILL-ROW (MATRIX ITEM-NAME ROW-NUM)

A macro useful for filling matrices in functions such as
CREATE-ROTATION-MATRIX.

# Undocumented

# ETEST-DIMENSIONS (LHS RHS)

# GENERIC-FUNCTION

# Public

# ANGLE-BETWEEN (FROM TO)

Returns the angle between two vectors. The angle is
in radians, and is signed. The angle represents the the angle needed
to transform the FROM vector to the TO vector.

# BETWEEN (START END)

Calculates the vector half way between two other
vectors. This is equivalent to (LINEAR-INTERPOLATION START END
0.5).

# C* (LHS RHS)

multiplies two objects together.

# C+ (LHS RHS)

Adds two objects together.

# C- (LHS RHS)

Subtracts objects.

# C/ (LHS RHS)

Divides two objects.

# COPY (ITEM)

Returns a copy of the given item.

# COPY-VECTOR (VECTOR)

Returns a copy of the original vector

# CROSS-PRODUCT (LHS RHS)

Calculates the cross product between 3-vectors

# DIMENSION (OBJECT)

Returns the dimensions of a given object.

# DOT-PRODUCT (LHS RHS)

Calculates the dot product between two vectors.

# ELT (VECTOR INDEX)

Returns the element of a VECTOR at the given index.

# EQUIVALENT (LHS RHS)

Returns t iff the two objects are numerically the
same. Real valued objects are always compared using
*equivalence-tolerance*.

# EUCLIDEAN-DISTANCE (LHS RHS)

Calculates the Euclidean distance between two objects.

# LENGTH (VECTOR)

An alias for DIMENSION

# LINEAR-INTERPOLATION (START END T-VAL)

Interpolates between two points, using the
parametric line equation. START and END are the two endpoints of a
line. While T-VAL takes values between 0 and 1, inclusive, the
returned points will lie between these two points. No matter the
value of T-VAL, the returned point will always be on the line, but
will be outside of the [start, end] line segment if T-VAL is not on
the domain [0, 1]

# MATRIX-COLS (MATRIX)

Returns the number of columns in a matrix.

# MATRIX-ELT (MATRIX ROW COL)

Return the matrix componenent at the given row and
column

# MATRIX-ROWS (MATRIX)

Return the number of rows in a matrix.

# MATRIX= (LHS RHS)

Returns t iff the two matrices are equal. Effected
by *equivalence-tolerance*.

# NEGATE (ITEM)

Returns an item with all of its elements
negated. This is non-destructive.

# NEGATE! (ITEM)

Returns the additive inverse of an item, much like
NEGATE, only this version is destructive.

# NORM (VECTOR)

The distance of the vector from zero.

# NORMALISE (VECTOR)

Returns a normalised version of the vector.

# NORMALISE! (VECTOR)

Destructively normalises the vector.

# TEST-DIMENSIONS (LHS RHS &KEY (TRANSPOSE-RHS NIL) (BOTH T))

Throws an error if the two objects do not agree in
dimensions. If the second object is a matrix, it is possible to
transpose the dimensions that are tested using the :transpose-rhs
argument.

# TO-VECTOR (ITEM &KEY DIMENSION)

Returns a new vector object based created from the
function's arguments. If dimension is supplied, it should be a
positive integer defining the dimension of the returned vector. If
the specified dimension is shorter than the given item, extra
elements are truncated. If it is longer, the new vector will be
padded with zero elements.

# TRANSPOSE (MATRIX)

Returns the non-destructive transpose of a matrix

# VECTOR= (LHS RHS)

Returns t iff the two vectors are equal. Effected
by *equivalence-tolerance*.

# W (VECTOR)

Returns the w component from an appropriately sized vector.

# SETFW (VALUE VECTOR)

Sets the w component from an appropriately sized vector.

# X (VECTOR)

Returns the x component from an appropriately sized vector.

# SETFX (VALUE VECTOR)

Sets the x component from an appropriately sized vector.

# Y (VECTOR)

Returns the y component from an appropriately sized vector.

# SETFY (VALUE VECTOR)

Sets the y component from an appropriately sized vector.

# Z (VECTOR)

Returns the z component from an appropriately sized vector.

# SETFZ (VALUE VECTOR)

Sets the z component from an appropriately sized vector.

# Private

# INITIALISE-DATA (ITEM SIZE)

Initialises the DATA slot to the given
size. Returns the vector object.

# TEST-NONZERO (VECTOR &OPTIONAL THRESHOLD)

Throws a ZERO-LENGTH-ERROR if the given vector has
a length close to zero.

# Undocumented

# DIMENSION-ERROR-DIM1 (CONDITION)

# DIMENSION-ERROR-DIM2 (CONDITION)

# L-MATH-ERROR-FORMAT-ARGUMENTS (CONDITION)

# L-MATH-ERROR-FORMAT-CONTROL (CONDITION)

# OPERATION-NOT-SUPORTED-OPERATION-NAME (CONDITION)

# OPERATION-NOT-SUPPORTED-EXTRA-INFORMATION (CONDITION)

# VARIABLE

# Public

# *EQUIVALENCE-TOLERANCE*

When objects are closer than this distance, they are considered equivalent.

# CLASS

# Public

# MATRIX

A mathematical matrix class.

# VECTOR (&REST ELEMENTS)

A mathematical vector class.