Re: warping space

Hi Rick,

> i'm working on a soil science application, wherein the data are in a
> time series of Gridded3DSets.  the Z dimension is depth below the
> surface.  so far, so good.
> 
> unfortunately, the surface isn't flat, and i want to display the data
> with regard to absolute depth, not depth measured from the surface.  i
> have the elevation data, of course.  conceptually speaking, what i want
> to do is shove data values deeper down in Z where there's a hollow on
> the surface, and pull them higher up where there's a hill.
> 
> i can use the brute-force approach, of course: extract the samples into
> arrays, and move the values up or down in each Z column depending on the
> elevation at that point.  but that's ugly, and probably inaccurate to
> boot,  since the set isn't uniformly sampled (there are fewer samples as
> you go deeper).
> 
> there's probably a spiffy way to resample my Gridded3DSets to accomplish
> this, but i'm danged if i know what it is.  does anything obvious leap
> out at y'all?

In your program you must construct your Gridded3DSet with a
call like:

  Set set = new Gridded3DSet(set_type, samples, ...);

where samples is an array float[3][number_of_samples].
Before the constructor call, put in a loop like:

  for (int i=0; i<number_of_samples; i++) {
    float x = samples[0][i];
    float y = samples[1][i];
    float z_surface = some_function_of(x, y);
    samples[2][i] = z_surface - samples[2][i];
  }
  Set set = new Gridded3DSet(set_type, samples, ...);

This will convert your surface-relative depths to altitude
above sea level, which can be converted to any other
absolute depth measure.

Cheers,
Bill
- ----------------------------------------------------------
Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI  53706
hibbard@xxxxxxxxxxxxxxxxx  608-263-4427  fax: 608-263-6738
http://www.ssec.wisc.edu/~billh/vis.html