summaryrefslogtreecommitdiffstats
path: root/Smoke/fluids.c
diff options
context:
space:
mode:
authorWilrik de Loose <wilrik@wilrik.nl>2008-01-10 20:59:50 (GMT)
committerWilrik de Loose <wilrik@wilrik.nl>2008-01-10 20:59:50 (GMT)
commitdcab21f30e9c451bfc2b7e65d90323b5e11a8612 (patch)
tree07ead18381e62c1ef7295252126410d73ac8164a /Smoke/fluids.c
parenta003a02f8ae4f5bc14cbed9249b0fbfefdd2fd07 (diff)
download2iv35-dcab21f30e9c451bfc2b7e65d90323b5e11a8612.zip
2iv35-dcab21f30e9c451bfc2b7e65d90323b5e11a8612.tar.gz
2iv35-dcab21f30e9c451bfc2b7e65d90323b5e11a8612.tar.bz2
normal vectors correct
Diffstat (limited to 'Smoke/fluids.c')
-rw-r--r--Smoke/fluids.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/Smoke/fluids.c b/Smoke/fluids.c
index 01ca443..a6c0a03 100644
--- a/Smoke/fluids.c
+++ b/Smoke/fluids.c
@@ -247,6 +247,11 @@ struct point vector_normal(struct point vert1, struct point vert2, struct point
return_value.y /= length;
return_value.z /= length;
+ if (return_value.x == return_value.y == return_value.z == 0.0f)
+ {
+ return_value.z = 1.0f;
+ }
+
return return_value;
}
@@ -263,7 +268,7 @@ void calculate_normal_vectors(void)
for (j = 0; j < DIM; j++)
{
for (i = 0; i < DIM; i++)
- {
+ {
idx = (j * DIM) + i;
px = wn + (fftw_real)i * wn;
py = hn + (fftw_real)(j + 1) * hn;
@@ -281,33 +286,39 @@ void calculate_normal_vectors(void)
p3.z = height_array[idx + 1];
normal_array[idx] = vector_normal(p2, p1, p3);
+ normal_array[idx + 1] = vector_normal(p2, p1, p3);
}
}
}
struct point calculate_normal_vector(fftw_real *height, int index, int i, int j)
{
- struct point p1, p2, p3;
+ int idx;
+ float px, py;
+ struct point p1, p2, p3, rv;
fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
- float px = wn + (fftw_real)i * wn;
- float py = hn + (fftw_real)(j + 1) * hn;
+
+ px = wn + (fftw_real)i * wn;
+ py = hn + (fftw_real)(j + 1) * hn;
p1.x = px;
- p1.y = py + hn;
- p1.z = height[index + DIM];
+ p1.y = py;
+ p1.z = height[index];
p2.x = px;
- p2.y = py;
- p2.z = height[index];
+ p2.y = py + hn;
+ p2.z = height[index + DIM];
p3.x = px + wn;
p3.y = py;
p3.z = height[index + 1];
+ normal_array[index] = vector_normal(p2, p1, p3);
+ rv = vector_normal(p2, p1, p3);
- return vector_normal(p1, p2, p3);
+ return rv;
}
void calculate_height_plots(void)
@@ -486,7 +497,8 @@ void fluids_calculate_one_simulation_step(struct vis_data_arrays *vis_data)
int dataset;
fftw_real *frame;
- if (fluids_calculate) {
+ if (fluids_calculate)
+ {
set_forces();
solve(DIM, vx, vy, vx0, vy0, visc, dt);
diffuse_matter(DIM, vx, vy, rho, rho0, dt);