for (int i = 0; i < CLOUD_DIM; i++) {
for (int j = 0; j < CLOUD_DIM; j++) {
for (int k = 0; k < CLOUD_DIM; k++) {
- cs->act[i][j][k] = rand() % 8 == 0;
+ cs->act[i][j][k] = randf() < 0.01;
cs->cld[i][j][k] = false;
- cs->hum[i][j][k] = rand() % 9 == 0;
+ cs->hum[i][j][k] = randf() < 0.01;
cs->p_ext[i][j][k] = 0.f;
cs->p_hum[i][j][k] = 0.f;
cs->p_act[i][j][k] = 0.f;
}
}
+ for (int i = 0; i < CLOUD_DIM; i++) {
+ for (int j = 0; j < CLOUD_DIM; j++) {
+ for (int k = 0; k < CLOUD_DIM; k++) {
+ assert(cs->p_act[i][j][k] == 0.f);
+ assert(cs->p_ext[i][j][k] == 0.f);
+ assert(cs->p_hum[i][j][k] == 0.f);
+ }
+ }
+ }
+
// generate ellipsoids of probability
for (int n = 0; n < 6; n++) {
- const float maxSize = 5;
- int width = randf() * maxSize, height = randf() * maxSize, depth = randf() * maxSize;
+ const float maxSize = 8, minSize = 4;
+ float delta = maxSize - minSize;
+ int width = minSize + randf() * delta, height = minSize + randf() * delta, depth = minSize + randf() * delta;
int x = randf() * CLOUD_DIM, y = randf() * CLOUD_DIM, z = randf() * CLOUD_DIM;
glm::vec3 center(x + width / 2, y + height / 2, z + depth / 2);
for (int i = x; i < x + width; i++) {
for (int j = y; j < y + height; j++) {
for (int k = z; k < z + depth; k++) {
- set(cs->p_ext, x, y, z, P_EXT * glm::distance(glm::vec3(x,y,z), center) / maxSize);
- set(cs->p_hum, x, y, z, P_HUM * (1.f - glm::distance(glm::vec3(x,y,z), center) / maxSize));
- set(cs->p_act, x, y, z, P_ACT * (1.f - glm::distance(glm::vec3(x,y,z), center) / maxSize));
+ float dist = glm::distance(glm::vec3(i,j,k), center) / maxSize;
+ set(cs->p_ext, i, j, k, P_EXT * dist);
+ set(cs->p_hum, i, j, k, P_HUM * (1.f - dist));
+ set(cs->p_act, i, j, k, P_ACT * (1.f - dist));
}
}
}
}
void growth(Clouds *cs) {
- Clouds ncs;
+ Clouds ncs = *cs;
for (int i = 0; i < CLOUD_DIM; i++) {
for (int j = 0; j < CLOUD_DIM; j++) {
}
void extinction(Clouds *cs) {
- Clouds ncs;
+ Clouds ncs = *cs;
for (int i = 0; i < CLOUD_DIM; i++) {
for (int j = 0; j < CLOUD_DIM; j++) {
for (int k = 0; k < CLOUD_DIM; k++) {