Re: how to fill in pixels

Hi Lak,

On Wed, 21 Aug 2002, V. Lakshmanan wrote:

> > I changed the MathType from
> >   (radial,gate)->(x,y,z,gatevalue)
> > to:
> >   (radial,gate) -> (x,y,z) -> (gatevalue)
> > and attached the x,y,z axes to the Display axes
> > and I do get filled pixels.

Actually, your new MathType is ((x,y,z) -> gatevalue).
A MathType of ((radial,gate) -> ((x,y,z) -> gatevalue))
would require a FieldImpl with FlatFields passed to
its setSamples() method.

> I spoke too soon ... there is still a problem.
> I do get filled pixels in the xy plane, but
> things are not filled along the surface of the
> cone ... instead I get rings.
>   There is a snapshot and source code at:
>      http://www.nssl.noaa.gov/~lakshman/ElevationScan.html

Thanks for this very informative web page about your problem.

> a) I am using x,y,z as the domain, so why is
> the x-y direction working, but not the z-component?
> b) Is there a conical geometry in visad that
> I am overlooking here?
> c) How do I tell the display not to interpolate
> but use the nearest neighbor?

As you said in your previous email, the domain Set of your
FlatField is a Gridded3DSet with manifold dimension = 1.
The rings in your image are actually connected in one big
spiral (you can see the jogs in the spiral at about 2:30
o'clock in your image).

There are several possible ways to see the elevation of
your data. One way is to use your original MathType:

  ((radial,gate)->(x,y,z,gatevalue))

with ScalarMaps radial->Longitude and gate->Radius. Then
in your call to addReference() use the signature that takes
a DataReference and also a ConstantMap[] array. Pass in a
ConstantMap of your elevation value to Latitude.

If you want the elevation to be part of your data, use the
MathType:

  (elevation, ((radial,gate)->(x,y,z,gatevalue)))

This is a Tuple combining a Real elevation with your
original FlatField. Then include ScalarMaps
radial->Longitude, gate->Radius and elevation->Latitude.

A different approach is to use the MathType of your
new program:

  ((x, y, z) -> gatevalue)

But use a Gridded3DSet with manfold dimension = 2.
In place of your constructor:

  new Gridded3DSet( domainTuple, xyz, xyz[0].length )

use:

  new Gridded3DSet( domainTuple, xyz, num_radials, num_gates )

Good luck,
Bill