home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
gondwana.ecr.mu.oz.au/pub/
/
Graphics.tar
/
Graphics
/
atomart.tar.gz
/
atomart.tar
/
matrix.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-06-14
|
3KB
|
104 lines
#include <stdio.h>
#include <math.h>
#include "atomart.h"
/*
* mcpy4
*
* copies 4 by 4 matrix m2 into m1
*/
void
mcpy4(m1, m2)
register float *m1, *m2;
{
register float *fin;
fin = m1 + 16;
while (m1 != fin)
*m1++ = *m2++;
}
/*
* mident4
*
* set m to a 4 by 4 identity matrix
*/
void
mident4(m)
register float *m;
{
register float *fin, *m1;
m1 = m;
fin = m + 16;
while (m != fin)
*m++ = 0;
m1[0] = 1.0;
m1[5] = 1.0;
m1[10] = 1.0;
m1[15] = 1.0;
}
/*
* mmult4
*
* mulitiplies four by four matrix m3 by m2, leaving result in
* m1.
*
*/
void
mmult4(m1, m2, m3)
register float m1[4][4], m2[4][4], m3[4][4];
{
m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0] + m2[0][3] * m3[3][0];
m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1] + m2[0][3] * m3[3][1];
m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2] + m2[0][3] * m3[3][2];
m1[0][3] = m2[0][0] * m3[0][3] + m2[0][1] * m3[1][3] + m2[0][2] * m3[2][3] + m2[0][3] * m3[3][3];
m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0] + m2[1][3] * m3[3][0];
m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1] + m2[1][3] * m3[3][1];
m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2] + m2[1][3] * m3[3][2];
m1[1][3] = m2[1][0] * m3[0][3] + m2[1][1] * m3[1][3] + m2[1][2] * m3[2][3] + m2[1][3] * m3[3][3];
m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0] + m2[2][3] * m3[3][0];
m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1] + m2[2][3] * m3[3][1];
m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2] + m2[2][3] * m3[3][2];
m1[2][3] = m2[2][0] * m3[0][3] + m2[2][1] * m3[1][3] + m2[2][2] * m3[2][3] + m2[2][3] * m3[3][3];
m1[3][0] = m2[3][0] * m3[0][0] + m2[3][1] * m3[1][0] + m2[3][2] * m3[2][0] + m2[3][3] * m3[3][0];
m1[3][1] = m2[3][0] * m3[0][1] + m2[3][1] * m3[1][1] + m2[3][2] * m3[2][1] + m2[3][3] * m3[3][1];
m1[3][2] = m2[3][0] * m3[0][2] + m2[3][1] * m3[1][2] + m2[3][2] * m3[2][2] + m2[3][3] * m3[3][2];
m1[3][3] = m2[3][0] * m3[0][3] + m2[3][1] * m3[1][3] + m2[3][2] * m3[2][3] + m2[3][3] * m3[3][3];
}
/*
* smult4
*
* multiply a 4 by 4 matrix by the scalar s
*
*/
smult4(m, s)
register float *m;
register float s;
{
register float *fin;
fin = m + 16;
while (m != fin)
*m++ *= s;
}
/*
* printmatrix
*
* print out a 4 by 4 matrix.
*/
printmatrix(m)
matrix m;
{
printf("matrix %x\n", m);
printf("%e %e %e %e\n", m[0][0], m[0][1], m[0][2], m[0][3]);
printf("%e %e %e %e\n", m[1][0], m[1][1], m[1][2], m[1][3]);
printf("%e %e %e %e\n", m[2][0], m[2][1], m[2][2], m[2][3]);
printf("%e %e %e %e\n", m[3][0], m[3][1], m[3][2], m[3][3]);
}