matrix.h

Go to the documentation of this file.
#ifndef __MATRIX_H__
#define __MATRIX_H__

/*
 * \file
 * This file is in the public domain.
 */

#include "user.h"

typedef enum {
 MatrixSet=0,
 MatrixAppend=1,
 MatrixPrepend=2
} MATRIXMODE;

typedef enum {
 MatrixM11, 
 MatrixM12,
 MatrixM21, 
 MatrixM22,
 MatrixDx, 
 MatrixDy
} MATRIXELEMENT;

typedef struct{
 DWORD opaque[14];
} MATRIX;

#define GetM11(x)  MatrixGetValue(x,MatrixM11)

#define GetM12(x)  MatrixGetValue(x,MatrixM12)

#define GetM21(x)  MatrixGetValue(x,MatrixM21)

#define GetM22(x)  MatrixGetValue(x,MatrixM22)

#define GetDx(x)  MatrixGetValue(x,MatrixDx)

#define GetDy(x)  MatrixGetValue(x,MatrixDy)

#define MatrixDoAppend(dst,src)  MatrixMultiply(dst,dst,src)

#define MatrixDoPrepend(dst,src)  MatrixMultiply(dst,src,dst)


double MatrixDeterminant(MATRIX *mat);
BOOL MatrixInvert(MATRIX *matDst, MATRIX *matSrc);
BOOL MatrixIsInvertible(MATRIX *mat);
BOOL MatrixIsIdentity(MATRIX *mat);
void MatrixSetIdentity(MATRIX *mat);
BOOL MatrixEquals(MATRIX *mat, MATRIX *mat2);
BOOL MatrixAreClose(MATRIX *mat, MATRIX *mat2);
void MatrixTransformVectors(MATRIX *mat, double *pts, DWORD numpts);
void MatrixTransformPoints(MATRIX *mat, double *pts, DWORD numpts);
double MatrixGetValue(MATRIX *mat, MATRIXELEMENT elem);
BOOL MatrixSetValue(MATRIX *mat, MATRIXELEMENT elem, double value);
BOOL MatrixGetValueArray(MATRIX *mat, double *values);
BOOL MatrixSetValueArray(MATRIX *mat, double *values);
void MatrixSetValues(MATRIX *mat, double m11, double m12, double m21, double m22, double dx, double dy);
void MatrixMultiply(MATRIX *matResult, MATRIX *matLeft, MATRIX *matRight);
void MatrixTranslate(MATRIX *mat, double x, double y, MATRIXMODE mode);
void MatrixScale(MATRIX *mat, double x, double y, MATRIXMODE mode);
void MatrixRotate(MATRIX *mat, double degrees, MATRIXMODE mode);
void MatrixParallelogram(MATRIX *mat, double *rect, double *points, MATRIXMODE mode);
void MatrixRotateAt(MATRIX *mat, double degrees, double x, double y, MATRIXMODE mode);
void MatrixScaleAt(MATRIX *mat, double x, double y, double centerX, double centerY, MATRIXMODE mode);
void MatrixShear(MATRIX *mat, double shearX, double shearY, MATRIXMODE mode);
void MatrixSkew(MATRIX *mat, double angleX, double angleY, MATRIXMODE mode);

#endif

Generated on Thu Mar 27 01:46:53 2008 for Item Arrays by  doxygen 1.4.6-NO