| 1 | 
< | 
/* Copyright (c) 1986 Regents of the University of California */ | 
| 1 | 
> | 
/* Copyright (c) 1990 Regents of the University of California */ | 
| 2 | 
  | 
 | 
| 3 | 
  | 
#ifndef lint | 
| 4 | 
  | 
static char SCCSid[] = "$SunId$ LBL"; | 
| 10 | 
  | 
 *     10/19/85 | 
| 11 | 
  | 
 */ | 
| 12 | 
  | 
 | 
| 13 | 
+ | 
#include  "mat4.h" | 
| 14 | 
  | 
 | 
| 15 | 
< | 
static double  m4tmp[4][4];             /* for efficiency */ | 
| 15 | 
> | 
static MAT4  m4tmp;             /* for efficiency */ | 
| 16 | 
  | 
 | 
| 16 | 
– | 
#ifdef  BSD | 
| 17 | 
– | 
#define  copymat4(m4a,m4b)      bcopy((char *)m4b,(char *)m4a,sizeof(m4tmp)) | 
| 18 | 
– | 
#else | 
| 19 | 
– | 
#define  copymat4(m4a,m4b)      (void)memcpy((char *)m4a,(char *)m4b,sizeof(m4tmp)) | 
| 20 | 
– | 
extern char  *memcpy(); | 
| 21 | 
– | 
#endif | 
| 17 | 
  | 
 | 
| 23 | 
– | 
 | 
| 18 | 
  | 
setident4(m4) | 
| 19 | 
< | 
double  m4[4][4]; | 
| 19 | 
> | 
MAT4  m4; | 
| 20 | 
  | 
{ | 
| 21 | 
< | 
        static double  ident[4][4] = { | 
| 21 | 
> | 
        static MAT4  ident = { | 
| 22 | 
  | 
                1.,0.,0.,0., | 
| 23 | 
  | 
                0.,1.,0.,0., | 
| 24 | 
  | 
                0.,0.,1.,0., | 
| 29 | 
  | 
 | 
| 30 | 
  | 
 | 
| 31 | 
  | 
multmat4(m4a, m4b, m4c)         /* multiply m4b X m4c and put into m4a */ | 
| 32 | 
< | 
double  m4a[4][4]; | 
| 33 | 
< | 
register double  m4b[4][4], m4c[4][4]; | 
| 32 | 
> | 
MAT4  m4a; | 
| 33 | 
> | 
register MAT4  m4b, m4c; | 
| 34 | 
  | 
{ | 
| 35 | 
  | 
        register int  i, j; | 
| 36 | 
  | 
         | 
| 46 | 
  | 
 | 
| 47 | 
  | 
 | 
| 48 | 
  | 
multv3(v3a, v3b, m4)    /* transform vector v3b by m4 and put into v3a */ | 
| 49 | 
< | 
double  v3a[3]; | 
| 50 | 
< | 
register double  v3b[3]; | 
| 51 | 
< | 
register double  m4[4][4]; | 
| 49 | 
> | 
FVECT  v3a; | 
| 50 | 
> | 
register FVECT  v3b; | 
| 51 | 
> | 
register MAT4  m4; | 
| 52 | 
  | 
{ | 
| 53 | 
  | 
        m4tmp[0][0] = v3b[0]*m4[0][0] + v3b[1]*m4[1][0] + v3b[2]*m4[2][0]; | 
| 54 | 
  | 
        m4tmp[0][1] = v3b[0]*m4[0][1] + v3b[1]*m4[1][1] + v3b[2]*m4[2][1]; | 
| 61 | 
  | 
 | 
| 62 | 
  | 
 | 
| 63 | 
  | 
multp3(p3a, p3b, m4)            /* transform p3b by m4 and put into p3a */ | 
| 64 | 
< | 
register double  p3a[3]; | 
| 65 | 
< | 
double  p3b[3]; | 
| 66 | 
< | 
register double  m4[4][4]; | 
| 64 | 
> | 
register FVECT  p3a; | 
| 65 | 
> | 
FVECT  p3b; | 
| 66 | 
> | 
register MAT4  m4; | 
| 67 | 
  | 
{ | 
| 68 | 
  | 
        multv3(p3a, p3b, m4);   /* transform as vector */ | 
| 69 | 
  | 
        p3a[0] += m4[3][0];     /* translate */ | 
| 80 | 
  | 
 */ | 
| 81 | 
  | 
 | 
| 82 | 
  | 
invmat(inverse,mat) | 
| 83 | 
< | 
double mat[4][4],inverse[4][4]; | 
| 83 | 
> | 
MAT4  mat, inverse; | 
| 84 | 
  | 
{ | 
| 85 | 
  | 
#define SWAP(a,b,t) (t=a,a=b,b=t) | 
| 86 | 
  | 
#define ABS(x) (x>=0?x:-(x)) |