--- ray/src/gen/genblinds.c 2003/11/16 10:29:38 2.11 +++ ray/src/gen/genblinds.c 2020/07/25 19:23:09 2.15 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: genblinds.c,v 2.11 2003/11/16 10:29:38 schorsch Exp $"; +static const char RCSid[] = "$Id: genblinds.c,v 2.15 2020/07/25 19:23:09 greg Exp $"; #endif /* * genblind2.c - make some curved or flat venetian blinds. @@ -15,13 +15,14 @@ static const char RCSid[] = "$Id: genblinds.c,v 2.11 2 * rcurv - curvature radius of slats (up:>0;down:<0;flat:=0) */ -#include -#include +#include "rtio.h" +#include #include -#include +#ifndef PI #define PI 3.14159265358979323846 -#define DELTA 10. /* MINIMAL SUSTAINED ANGLE IN DEGREES */ +#endif +#define DELTA 3. /* MINIMAL SUSTAINED ANGLE IN DEGREES */ double baseflat[4][3], baseblind[4][3][180]; double A[3],X[3]; @@ -32,9 +33,7 @@ int nslats, nsurf; static void makeflat(double w, double d, double a); static void printslat(int n); -static void printhead(register int ac, register char **av); - void makeflat( double w, @@ -67,7 +66,7 @@ printslat( /* print slat # n */ int n ) { - register int i, k; + int i, k; for (k=0; k < nsurf; k++) { printf("\n%s polygon %s.%d.%d\n", material, name, n, k); @@ -81,28 +80,13 @@ printslat( /* print slat # n */ } -void -printhead( /* print command header */ - register int ac, - register char **av -) -{ - putchar('#'); - while (ac--) { - putchar(' '); - fputs(*av++, stdout); - } - putchar('\n'); -} - - int main( int argc, char *argv[] ) { - double width, delem, depth, rcurv = 0.0, angle; + double width, delem, depth, rcurv = 0.0, mydelta, angle; double beta, gamma, theta, chi = 0; int i, j, k, l; @@ -116,29 +100,31 @@ main( height = atof(argv[5]); nslats = atoi(argv[6]); angle = atof(argv[7]); - if (argc == 10) + if (argc == 10) { if (!strcmp(argv[8], "-r")) rcurv = atof(argv[9]); else if (!strcmp(argv[8], "+r")) rcurv = -atof(argv[9]); else goto userr; - + } /* CURVED BLIND CALCULATION */ - if (rcurv != 0) { + if (rcurv != 0.) { /* BLINDS SUSTAINED ANGLE */ - theta = 2*asin(depth/(2*fabs(rcurv))); + theta = 2.*asin(depth/(2.*fabs(rcurv))); /* HOW MANY ELEMENTARY SURFACES SHOULD BE CALCULATED ? */ - nsurf = (int)(theta / ((PI/180.)*DELTA)) + 1; + nsurf = (int)(theta / ((PI/180.)*DELTA) + 0.99999); + + mydelta = (180./PI) * theta / nsurf; /* WHAT IS THE DEPTH OF THE ELEMENTARY SURFACES ? */ - delem = 2*fabs(rcurv)*sin((PI/180.)*(DELTA/2.)); + delem = 2.*fabs(rcurv)*sin((PI/180.)*(mydelta/2.)); beta = (PI-theta)/2.; gamma = beta -((PI/180.)*angle); @@ -147,7 +133,7 @@ main( if (rcurv < 0) { A[0]=fabs(rcurv)*cos(gamma); - A[0] *= -1; + A[0] *= -1.; A[1]=0.; A[2]=fabs(rcurv)*sin(gamma); } @@ -155,27 +141,27 @@ main( A[0]=fabs(rcurv)*cos(gamma+theta); A[1]=0.; A[2]=fabs(rcurv)*sin(gamma+theta); - A[2] *= -1; + A[2] *= -1.; } for (k=0; k < nsurf; k++) { if (rcurv < 0) { - chi=(PI/180.)*((180.-DELTA)/2.) - (gamma+(k*(PI/180.)*DELTA)); + chi=(PI/180.)*((180.-mydelta)/2.) - (gamma+(k*(PI/180.)*mydelta)); } if (rcurv > 0) { - chi=(PI-(gamma+theta)+(k*(PI/180.)*DELTA))-(PI/180.)* - ((180.-DELTA)/2.); + chi=(PI-(gamma+theta)+(k*(PI/180.)*mydelta))-(PI/180.)* + ((180.-mydelta)/2.); } makeflat(width, delem, chi); if (rcurv < 0.) { - X[0]=(-fabs(rcurv))*cos(gamma+(k*(PI/180.)*DELTA))-A[0]; + X[0]=(-fabs(rcurv))*cos(gamma+(k*(PI/180.)*mydelta))-A[0]; X[1]=0.; - X[2]=fabs(rcurv)*sin(gamma+(k*(PI/180.)*DELTA))-A[2]; + X[2]=fabs(rcurv)*sin(gamma+(k*(PI/180.)*mydelta))-A[2]; } if (rcurv > 0.) { - X[0]=fabs(rcurv)*cos(gamma+theta-(k*(PI/180.)*DELTA))-A[0]; + X[0]=fabs(rcurv)*cos(gamma+theta-(k*(PI/180.)*mydelta))-A[0]; X[1]=0.; - X[2]=(-fabs(rcurv))*sin(gamma+theta-(k*(PI/180.)*DELTA))-A[2]; + X[2]=(-fabs(rcurv))*sin(gamma+theta-(k*(PI/180.)*mydelta))-A[2]; } for (i=0; i < 4; i++) { @@ -188,7 +174,7 @@ main( /* FLAT BLINDS CALCULATION */ - if (rcurv == 0.) { + else { nsurf=1; makeflat(width,depth,angle*(PI/180.)); @@ -199,8 +185,9 @@ main( } } - printhead(argc, argv); - + fputs("# ", stdout); + printargs(argc, argv, stdout); + /* REPEAT THE BASIC CURVED OR FLAT SLAT TO GET THE OVERALL BLIND */