1 /* #include "HEADERS.h" */
2 /* Copyright 1988, Brown Computer Graphics Group. All Rights Reserved. */
4 /* --------------------------------------------------------------------------
5 * This file contains routines that operate solely on matrices.
6 * -------------------------------------------------------------------------*/
14 # ifndef HAVE_STL_SGI_PORT
18 # include <memory.h> /* required for memset() and memcpy() */
24 #include <Math/mat3defs.h>
26 MAT3mat identityMatrix = {
27 { 1.0, 0.0, 0.0, 0.0 },
28 { 0.0, 1.0, 0.0, 0.0 },
29 { 0.0, 0.0, 1.0, 0.0 },
30 { 0.0, 0.0, 0.0, 1.0 }
33 /* #include "macros.h" */
35 /* -------------------------- Static Routines ---------------------------- */
37 /* ------------------------- Internal Routines --------------------------- */
39 /* -------------------------- Public Routines ---------------------------- */
42 #if !defined( USE_XTRA_MAT3_INLINES )
45 * This multiplies two matrices, producing a third, which may the same as
46 * either of the first two.
50 MAT3mult (double (*result_mat)[4], register double (*mat1)[4], register double (*mat2)[4])
55 for (i = 0; i < 4; i++)
56 for (j = 0; j < 4; j++)
57 tmp_mat[i][j] = (mat1[i][0] * mat2[0][j] +
58 mat1[i][1] * mat2[1][j] +
59 mat1[i][2] * mat2[2][j] +
60 mat1[i][3] * mat2[3][j]);
61 MAT3copy (result_mat, tmp_mat);
63 #endif // !defined( USE_XTRA_MAT3_INLINES )
66 * This returns the transpose of a matrix. The result matrix may be
67 * the same as the one to transpose.
71 MAT3transpose (double (*result_mat)[4], register double (*mat)[4])
76 for (i = 0; i < 4; i++)
77 for (j = 0; j < 4; j++)
78 tmp_mat[i][j] = mat[j][i];
80 MAT3copy (result_mat, tmp_mat);
85 * This prints the given matrix to the given file pointer.
89 MAT3print(double (*mat)[4], FILE *fp)
91 MAT3print_formatted(mat, fp, CNULL, CNULL, CNULL, CNULL);
95 * This prints the given matrix to the given file pointer.
96 * use the format string to pass to fprintf. head and tail
97 * are printed at the beginning and end of each line.
101 MAT3print_formatted(double (*mat)[4], FILE *fp, char *title, char *head, char *format, char *tail)
105 /* This is to allow this to be called easily from a debugger */
106 if (fp == NULL) fp = stderr;
108 if (title == NULL) title = "MAT3 matrix:\n";
109 if (head == NULL) head = " ";
110 if (format == NULL) format = "%#8.4lf ";
111 if (tail == NULL) tail = "\n";
113 (void) fprintf(fp, title);
115 for (i = 0; i < 4; i++) {
116 (void) fprintf(fp, head);
117 for (j = 0; j < 4; j++) (void) fprintf(fp, format, mat[i][j]);
118 (void) fprintf(fp, tail);