FloatImage *VectorField::get_divergence(int xs, int ys) { int i,j; FloatImage *image = new FloatImage(xsize-2, ysize-2); float d = 0.1 / xsize; for (i = 1; i < xsize-1; i++) for (j = 1; j < ysize-1; j++) { float dx = xval(i+1, j) - xval(i-1, j); float dy = yval(i, j+1) - yval(i, j-1); float div = (dx + dy) / (2 * d); image->pixel(i-1, j-1) = div; } FloatImage *image2 = new FloatImage(xs, ys); for (i = 0; i < xs; i++) for (j = 0; j < ys; j++) { float x = (i + 0.5) / xs; float y = (j + 0.5) / ys; image2->pixel(i,j) = image->get_value(x,y); } delete image; return (image2); }
FloatImage *VectorField::get_vorticity(int xs, int ys) { int i,j; FloatImage *image = new FloatImage(xsize-2, ysize-2); float d = 0.1 / xsize; for (i = 1; i < xsize-1; i++) for (j = 1; j < ysize-1; j++) { float dx = yval(i+1, j) - yval(i-1, j); float dy = xval(i, j+1) - xval(i, j-1); float vort = (dx/d) - (dy/d); image->pixel(i-1, j-1) = vort; } FloatImage *image2 = new FloatImage(xs, ys); for (i = 0; i < xs; i++) for (j = 0; j < ys; j++) { float x = (i + 0.5) / xs; float y = (j + 0.5) / ys; image2->pixel(i,j) = image->get_value(x,y); } delete image; return (image2); }