| 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 |
|
* 1/28/86 |
| 11 |
|
*/ |
| 12 |
|
|
| 13 |
+ |
#include "standard.h" |
| 14 |
|
|
| 14 |
– |
#define PI 3.14159265358979323846 |
| 15 |
|
#define d2r(a) ((PI/180.)*(a)) |
| 16 |
|
|
| 17 |
|
#define checkarg(a,n) if (av[i][a] || i+n >= ac) goto done |
| 18 |
|
|
| 19 |
|
|
| 20 |
|
int |
| 21 |
< |
xf(retmat, retsca, ac, av) /* get transform specification */ |
| 22 |
< |
double retmat[4][4]; |
| 23 |
< |
double *retsca; |
| 21 |
> |
xf(ret, ac, av) /* get transform specification */ |
| 22 |
> |
register XF *ret; |
| 23 |
|
int ac; |
| 24 |
|
char *av[]; |
| 25 |
|
{ |
| 28 |
|
double xfsca, dtmp; |
| 29 |
|
int i, icnt; |
| 30 |
|
|
| 31 |
< |
setident4(retmat); |
| 32 |
< |
*retsca = 1.0; |
| 31 |
> |
setident4(ret->xfm); |
| 32 |
> |
ret->sca = 1.0; |
| 33 |
|
|
| 34 |
|
icnt = 1; |
| 35 |
|
setident4(xfmat); |
| 109 |
|
case 'i': /* iterate */ |
| 110 |
|
checkarg(2,1); |
| 111 |
|
while (icnt-- > 0) { |
| 112 |
< |
multmat4(retmat, retmat, xfmat); |
| 113 |
< |
*retsca *= xfsca; |
| 112 |
> |
multmat4(ret->xfm, ret->xfm, xfmat); |
| 113 |
> |
ret->sca *= xfsca; |
| 114 |
|
} |
| 115 |
|
icnt = atoi(av[++i]); |
| 116 |
|
setident4(xfmat); |
| 125 |
|
} |
| 126 |
|
done: |
| 127 |
|
while (icnt-- > 0) { |
| 128 |
< |
multmat4(retmat, retmat, xfmat); |
| 129 |
< |
*retsca *= xfsca; |
| 128 |
> |
multmat4(ret->xfm, ret->xfm, xfmat); |
| 129 |
> |
ret->sca *= xfsca; |
| 130 |
|
} |
| 131 |
|
return(i); |
| 132 |
|
} |
| 133 |
|
|
| 134 |
|
|
| 136 |
– |
#ifdef INVXF |
| 135 |
|
int |
| 136 |
< |
invxf(retmat, retsca, ac, av) /* invert transform specification */ |
| 137 |
< |
double retmat[4][4]; |
| 140 |
< |
double *retsca; |
| 136 |
> |
invxf(ret, ac, av) /* invert transform specification */ |
| 137 |
> |
register XF *ret; |
| 138 |
|
int ac; |
| 139 |
|
char *av[]; |
| 140 |
|
{ |
| 143 |
|
double xfsca, dtmp; |
| 144 |
|
int i, icnt; |
| 145 |
|
|
| 146 |
< |
setident4(retmat); |
| 147 |
< |
*retsca = 1.0; |
| 146 |
> |
setident4(ret->xfm); |
| 147 |
> |
ret->sca = 1.0; |
| 148 |
|
|
| 149 |
|
icnt = 1; |
| 150 |
|
setident4(xfmat); |
| 224 |
|
case 'i': /* iterate */ |
| 225 |
|
checkarg(2,1); |
| 226 |
|
while (icnt-- > 0) { |
| 227 |
< |
multmat4(retmat, xfmat, retmat); |
| 228 |
< |
*retsca *= xfsca; |
| 227 |
> |
multmat4(ret->xfm, xfmat, ret->xfm); |
| 228 |
> |
ret->sca *= xfsca; |
| 229 |
|
} |
| 230 |
|
icnt = atoi(av[++i]); |
| 231 |
|
setident4(xfmat); |
| 240 |
|
} |
| 241 |
|
done: |
| 242 |
|
while (icnt-- > 0) { |
| 243 |
< |
multmat4(retmat, xfmat, retmat); |
| 244 |
< |
*retsca *= xfsca; |
| 243 |
> |
multmat4(ret->xfm, xfmat, ret->xfm); |
| 244 |
> |
ret->sca *= xfsca; |
| 245 |
|
} |
| 246 |
|
return(i); |
| 247 |
|
} |
| 248 |
< |
#endif |
| 248 |
> |
|
| 249 |
> |
|
| 250 |
> |
int |
| 251 |
> |
fullxf(fx, ac, av) /* compute both forward and inverse */ |
| 252 |
> |
FULLXF *fx; |
| 253 |
> |
int ac; |
| 254 |
> |
char *av[]; |
| 255 |
> |
{ |
| 256 |
> |
xf(&fx->f, ac, av); |
| 257 |
> |
return(invxf(&fx->b, ac, av)); |
| 258 |
> |
} |