home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
RISC DISC 3
/
RISC_DISC_3.iso
/
resources
/
etexts
/
gems
/
gemsii
/
fastupdate.c
< prev
next >
Wrap
Text File
|
1991-09-22
|
914b
|
45 lines
/*
* Author: Filippo Tampieri
*/
#define FALSE 0
#define TRUE 1
#define DOT(A,B) (A[0] * B[0] + A[1] * B[1] + A[2] * B[2])
/*
vertexIsBehindPlane returns TRUE if point P is behind the
plane of normal N and coefficient d, FALSE otherwise.
*/
vertexIsBehindPlane(P, N, d)
float P[3], N[3], d;
{
return(DOT(N, P) + d <= 0. ? TRUE : FALSE);
}
/*
boxIsBehindPlane returns TRUE if the axis-aligned box of
minimum corner Cmin and maximum corner Cmax is behind the
plane of normal N and coefficient d, FALSE otherwise.
*/
boxIsBehindPlane(Cmin, Cmax, N, d)
float Cmin[3], Cmax[3], N[3], d;
{
register int i;
float P[3];
/*
assign to P the corner further away
along the direction of normal N
*/
for(i = 0; i < 3; i++)
P[i] = N[i] >= 0. ? Cmax[i] : Cmin[i];
/* test P against the input plane */
return(vertexIsBehindPlane(P, N, d));
}