Exemplo n.º 1
0
int main()
{
  grid_t g;

  for(int i = 0; i < 9; i++) {
    for(int j = 0; j < 9; j++) {
      g.grid[i][j] = 0;
    }
  }

  g.grid[2][0] = 8;
  g.grid[3][0] = 2;
  g.grid[8][0] = 5;
  g.grid[4][1] = 6;
  g.grid[6][1] = 1;
  g.grid[8][1] = 4;
  g.grid[0][2] = 9;
  g.grid[2][2] = 4;
  g.grid[4][2] = 1;
  g.grid[6][2] = 7;
  g.grid[8][2] = 8;
  g.grid[0][3] = 4;
  g.grid[6][3] = 5;
  g.grid[2][4] = 2;
  g.grid[3][4] = 5;
  g.grid[5][4] = 3;
  g.grid[7][4] = 8;
  g.grid[8][4] = 1;
  g.grid[0][5] = 5;
  g.grid[4][5] = 8;
  g.grid[7][5] = 7;
  g.grid[2][6] = 1;
  g.grid[3][6] = 9;
  g.grid[7][6] = 5;
  g.grid[3][7] = 1;
  g.grid[1][8] = 5;
  g.grid[2][8] = 9;
  g.grid[3][8] = 8;
  g.grid[5][8] = 2;
  g.grid[7][8] = 1;
  g.grid[8][8] = 3;

  Boltzmann solver(g);

  while(1) {
    solver.simulate(false);
    dumpGrid(solver.getGrid());
  }
}
static byte_t * getRawHeightfieldData(eTerrainModel model, PHY_ScalarType type, btScalar& minHeight, btScalar& maxHeight){
//	std::cerr << "\nRegenerating terrain\n";
//	std::cerr << "  model = " << model << "\n";
//	std::cerr << "  type = " << type << "\n";

	long nElements = ((long) s_gridSize) * s_gridSize;
//	std::cerr << "  nElements = " << nElements << "\n";

	int bytesPerElement = sizeof(float);
//	std::cerr << "  bytesPerElement = " << bytesPerElement << "\n";
	btAssert(bytesPerElement > 0 && "bad bytes per element");

	long nBytes = nElements * bytesPerElement;
//	std::cerr << "  nBytes = " << nBytes << "\n";
	byte_t * raw = new byte_t[nBytes];
	btAssert(raw && "out of memory");

	// reseed randomization every 30 seconds
//	srand(time(NULL) / 30);

	// populate based on model
	setRadial(raw, bytesPerElement, type);

	if (0) {
		// inside if(0) so it keeps compiling but isn't
		// 	exercised and doesn't cause warnings
//		std::cerr << "final grid:\n";
		dumpGrid(raw, bytesPerElement, type, s_gridSize - 1);
	}

	// find min/max
	for (int i = 0; i < s_gridSize; ++i) {
		for (int j = 0; j < s_gridSize; ++j) {
			float z = getGridHeight(raw, i, j, type);
//			std::cerr << "i=" << i << ", j=" << j << ": z=" << z << "\n";

			// update min/max
			if (!i && !j) {
				minHeight = z;
				maxHeight = z;
			} else {
				if (z < minHeight) {
					minHeight = z;
				}
				if (z > maxHeight) {
					maxHeight = z;
				}
			}
		}
	}

	if (maxHeight < -minHeight) {
		maxHeight = -minHeight;
	}
	if (minHeight > -maxHeight) {
		minHeight = -maxHeight;
	}

//	std::cerr << "  minHeight = " << minHeight << "\n";
//	std::cerr << "  maxHeight = " << maxHeight << "\n";

	return raw;
}