.TH MATRIX 3
.SH NAME
ident, matmul, matmulr, determinant, adjoint, invertmat, xformpoint, xformpointd, xformplane, pushmat, popmat, rot, qrot, scale, move, xform, ixform, persp, look, viewport \- Geometric transformations
.SH SYNOPSIS
.PP
.B
#include <draw.h>
.PP
.B
#include <geometry.h>
.PP
.B
void ident(Matrix m)
.PP
.B
void matmul(Matrix a, Matrix b)
.PP
.B
void matmulr(Matrix a, Matrix b)
.PP
.B
double determinant(Matrix m)
.PP
.B
void adjoint(Matrix m, Matrix madj)
.PP
.B
double invertmat(Matrix m, Matrix inv)
.PP
.B
Point3 xformpoint(Point3 p, Space *to, Space *from)
.PP
.B
Point3 xformpointd(Point3 p, Space *to, Space *from)
.PP
.B
Point3 xformplane(Point3 p, Space *to, Space *from)
.PP
.B
Space *pushmat(Space *t)
.PP
.B
Space *popmat(Space *t)
.PP
.B
void rot(Space *t, double theta, int axis)
.PP
.B
void qrot(Space *t, Quaternion q)
.PP
.B
void scale(Space *t, double x, double y, double z)
.PP
.B
void move(Space *t, double x, double y, double z)
.PP
.B
void xform(Space *t, Matrix m)
.PP
.B
void ixform(Space *t, Matrix m, Matrix inv)
.PP
.B
int persp(Space *t, double fov, double n, double f)
.PP
.B
void look(Space *t, Point3 eye, Point3 look, Point3 up)
.PP
.B
void viewport(Space *t, Rectangle r, double aspect)
.SH DESCRIPTION
These routines manipulate 3-space affine and projective transformations,
represented as 4\(mu4 matrices, thus:
.IP
.EX
.ta 6n
typedef double Matrix[4][4];
.EE
.PP
.I Ident
stores an identity matrix in its argument.
.I Matmul
stores
.I a\(mub
in
.IR a .
.I Matmulr
stores
.I b\(mua
in
.IR b .
.I Determinant
returns the determinant of matrix
.IR m .
.I Adjoint
stores the adjoint (matrix of cofactors) of
.I m
in
.IR madj .
.I Invertmat
stores the inverse of matrix
.I m
in
.IR minv ,
returning
.IR m 's
determinant.
Should
.I m
be singular (determinant zero),
.I invertmat
stores its
adjoint in
.IR minv .
.PP
The rest of the routines described here
manipulate
.I Spaces
and transform
.IR Point3s .
A
.I Point3
is a point in three-space, represented by its
homogeneous coordinates:
.IP
.EX
typedef struct Point3 Point3;
struct Point3{
	double x, y, z, w;
};
.EE
.PP
The homogeneous coordinates
.RI ( x ,
.IR y ,
.IR z ,
.IR w )
represent the Euclidean point
.RI ( x / w ,
.IR y / w ,
.IR z / w )
if
.IR w ≠0,
and a ``point at infinity'' if
.IR w =0.
.PP
A
.I Space
is just a data structure describing a coordinate system:
.IP
.EX
typedef struct Space Space;
struct Space{
	Matrix t;
	Matrix tinv;
	Space *next;
};
.EE
.PP
It contains a pair of transformation matrices and a pointer
to the
.IR Space 's
parent.  The matrices transform points to and from the ``root
coordinate system,'' which is represented by a null
.I Space
pointer.
.PP
.I Pushmat
creates a new
.IR Space .
Its argument is a pointer to the parent space.  Its result
is a newly allocated copy of the parent, but with its
.B next
pointer pointing at the parent.
.I Popmat
discards the
.B Space
that is its argument, returning a pointer to the stack.
Nominally, these two functions define a stack of transformations,
but
.B pushmat
can be called multiple times
on the same
.B Space
multiple times, creating a transformation tree.
.PP
.I Xformpoint
and
.I Xformpointd
both transform points from the
.B Space
pointed to by
.I from
to the space pointed to by
.IR to .
Either pointer may be null, indicating the root coordinate system.
The difference between the two functions is that
.B xformpointd
divides
.IR x ,
.IR y ,
.IR z ,
and
.I w
by
.IR w ,
if
.IR w ≠0,
making
.RI ( x ,
.IR y ,
.IR z )
the Euclidean coordinates of the point.
.PP
.I Xformplane
transforms planes or normal vectors.  A plane is specified by the
coefficients
.RI ( a ,
.IR b ,
.IR c ,
.IR d )
of its implicit equation
.IR ax+by+cz+d =0.
Since this representation is dual to the homogeneous representation of points,
.B libgeometry
represents planes by
.B Point3
structures, with
.RI ( a ,
.IR b ,
.IR c ,
.IR d )
stored in
.RI ( x ,
.IR y ,
.IR z ,
.IR w ).
.PP
The remaining functions transform the coordinate system represented
by a
.BR Space .
Their
.B Space *
argument must be non-null \(em you can't modify the root
.BR Space .
.I Rot
rotates by angle
.I theta
(in radians) about the given
.IR axis ,
which must be one of
.BR XAXIS ,
.B YAXIS
or
.BR ZAXIS .
.I Qrot
transforms by a rotation about an arbitrary axis, specified by
.B Quaternion
.IR q .
.PP
.I Scale
scales the coordinate system by the given scale factors in the directions of the three axes.
.IB Move
translates by the given displacement in the three axial directions.
.PP
.I Xform
transforms the coordinate system by the given
.BR Matrix .
If the matrix's inverse is known
.I a
.IR priori ,
calling
.I ixform
will save the work of recomputing it.
.PP
.I Persp
does a perspective transformation.
The transformation maps the frustum with apex at the origin,
central axis down the positive
.I y
axis, and apex angle
.I fov
and clipping planes
.IR y = n
and
.IR y = f
into the double-unit cube.
The plane
.IR y = n
maps to
.IR y '=-1,
.IR y = f
maps to
.IR y '=1.
.PP
.I Look
does a view-pointing transformation.  The
.B eye
point is moved to the origin.
The line through the
.I eye
and
.I look
points is aligned with the y axis,
and the plane containing the
.BR eye ,
.B look
and
.B up
points is rotated into the
.IR x - y
plane.
.PP
.I Viewport
maps the unit-cube window into the given screen viewport.
The viewport rectangle
.I r
has
.IB r .min
at the top left-hand corner, and
.IB r .max
just outside the lower right-hand corner.
Argument
.I aspect
is the aspect ratio
.RI ( dx / dy )
of the viewport's pixels (not of the whole viewport).
The whole window is transformed to fit centered inside the viewport with equal
slop on either top and bottom or left and right, depending on the viewport's
aspect ratio.
The window is viewed down the
.I y
axis, with
.I x
to the left and
.I z
up.  The viewport
has
.I x
increasing to the right and
.I y
increasing down.  The window's
.I y
coordinates are mapped, unchanged, into the viewport's
.I z
coordinates.
.SH SOURCE
.B \*9/src/libgeometry/matrix.c
.SH "SEE ALSO
.IR arith3 (3)
