Пример #1
0
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;
}