int main() { unsigned int x,y,z,b,volume; unsigned int minx, miny, minz, maxx, maxy, maxz; double scale = 2 * RANGE / SIZE; for(z=0;z<SIZE;z++) { double fz=valInRange(zlow, zhigh, SIZE, z); fprintf(stderr,"fz=%lf\n", fz); for(y=0;y<SIZE;y++) { double fy=valInRange(ylow, yhigh, SIZE, y); for(x=0;x<SIZE;x++) { double fx=valInRange(xlow, xhigh, SIZE, x); unsigned int val=doPoint(fx,fy,fz); voxels[z][y][x] = (val >= (maxit - 1)) ? 1 : 0; } } } #ifdef HOLLOW makeHollow(); #endif fprintf(stderr, "writing voxel array\n"); volume = 0; for (z = 0; z < SIZE; z++) { for (y = 0; y < SIZE; y++) { for (x = 0; x < SIZE; x++) { b = voxels[z][y][x]; putchar(b ? 255 : 0); if (b) { volume++; minx = min(x, minx); maxx = max(x, maxx); miny = min(y, miny); maxy = max(y, maxy); minz = min(z, minz); maxz = max(z, maxz); } } } } fprintf(stderr, "volume: %f (%d voxels)\n", (volume * scale * scale * scale), volume); fprintf(stderr, "z,y,x dimensions: %f, %f, %f (%d, %d, %d voxels)\n", (maxz - minz) * scale, (maxy - miny) * scale, (maxx - minx) * scale, maxz - minz, maxy - miny, maxx - minx); exit(0); }
bool rectOverlap(SDL_Rect a, SDL_Rect b) { bool xOverlap = valInRange(a.x, b.x, b.x + b.w) || valInRange(b.x, a.x, a.x + a.w); bool yOverlap = valInRange(a.y, b.y, b.y + b.h) || valInRange(b.y, a.y, a.y + a.h); return xOverlap && yOverlap; }