#include #include #include #include #include "writemesh.h" #define NU 50 #define NV 30 #define A 2.0 #define B 0.7 #define C 0.3 static FILE *outfile; double a, b, c, d, e, f; int ifun; char *outfilename; int main (int argc, char *argv[]) { double pi; double u0, u1, v0, v1; double du, dv; int i, j; char defaultfilename[] = "mesh.povinc"; pi = 4*atan(1.0); du = 2*pi/NU; dv = 2*pi/NV; a = A; b = B; c = C; ifun = F_TORUS; outfilename = defaultfilename; parseargs (argc, argv); outfile = fopen (outfilename, "w"); u0 = -pi; for (i = 0; i < NU; i++) { u1 = u0 + du; v0 = -pi; for (j = 0; j < NV; j++) { v1 = v0 + dv; quadrilateral (u0, u1, v0, v1); v0 = v1; } u0 = u1; } fclose (outfile); exit (0); } void quadrilateral (double u0, double u1, double v0, double v1) { struct point p00, p10, p01, p11; surface (u0, v0, &p00); surface (u1, v0, &p10); surface (u0, v1, &p01); surface (u1, v1, &p11); triangle (p00, p10, p11); triangle (p00, p11, p01); } void triangle (struct point pa, struct point pb, struct point pc) { fprintf (outfile, "smooth_triangle {\n"); fprintf (outfile, "<%lf, %lf, %lf>, <%lf, %lf, %lf>,\n", pa.p[0], pa.p[2], pa.p[1], pa.n[0], pa.n[2], pa.n[1]); fprintf (outfile, "<%lf, %lf, %lf>, <%lf, %lf, %lf>,\n", pb.p[0], pb.p[2], pb.p[1], pb.n[0], pb.n[2], pb.n[1]); fprintf (outfile, "<%lf, %lf, %lf>, <%lf, %lf, %lf>}\n", pc.p[0], pc.p[2], pc.p[1], pc.n[0], pc.n[2], pc.n[1]); } void parseargs (int argc, char *argv[]) { int i; for (i = 1; i < argc; i++) { if (strcmp (argv[i], "-o") == 0) { outfilename = argv[++i]; } else if (strcmp (argv[i], "-s") == 0) { ifun = atoi (argv[++i]); } else { printf ("Invalid option %s\n", argv[i]); } } }