#include "stdio.h" #include "stdlib.h" #include "math.h" #include "paulslib.h" #include "bitmaplib.h" #define N 200 double ***grid; int main(int argc,char **argv) { int i,j,k; short int si; double v,vmin=1e32,vmax=-1e32; double a,b,da,db; XYZ p; BITMAP *image,c; COLOUR colour; char fname[32]; FILE *fptr,*fvol; grid = malloc((N+1)*sizeof(double **)); for (i=0;i<=N;i++) { grid[i] = malloc((N+1)*sizeof(double *)); } for (i=0;i<=N;i++) { for (j=0;j<=N;j++) { grid[i][j] = malloc((N+1)*sizeof(double)); } } for (i=0;i<=N;i++) for (j=0;j<=N;j++) for (k=0;k<=N;k++) grid[i][j][k] = 0; a = 1 / 2.3; b = 1 / 2.0; for (i=0;i<=N;i++) { fprintf(stderr,"%d ",i); for (j=0;j<=N;j++) { for (k=0;k<=N;k++) { p.x = 5 * (i - N/2.0) / (float)N; p.y = 5 * (j - N/2.0) / (float)N; p.z = 5 * (k - N/2.0) / (float)N; da = pow(a*p.x,2.0) + pow(a*p.y,2.0) + pow(a*p.z,2.0); db = pow(b*p.x,8.0) + pow(b*p.y,8.0) + pow(b*p.z,8.0); if (da < 0.0001) da = 0.0001; v = 1 - 1.0/(da*da*da*da*da*da) - db*db*db*db*db*db; if (v < -20) v = -20; if (v > 20) v = 20; grid[i][j][k] = v; vmin = MIN(vmin,v); vmax = MAX(vmax,v); } } } fprintf(stderr,"\nRange = %g -> %g\n",vmin,vmax); /* Write the result */ fvol = fopen("wiffle.vol","w"); fprintf(fvol,"Wiffle cube\n"); fprintf(fvol,"%d %d %d\n",N,N,N); fprintf(fvol,"1.0 1.0 1.0\n"); fprintf(fvol,"0.0 0.0 0.0\n"); fprintf(fvol,"16 1\n"); for (k=0;k