RE: SHOWSTOPPER! I cannot display an Irregular2DSet with more than 3000 points

You are the man!
Thank you so much.
I am ecstatic!
(That worked)

-----Original Message-----
From: Bill Hibbard [mailto:hibbard@xxxxxxxxxxxxxxxxx]
Sent: Wednesday, August 07, 2002 11:20 AM
To: Chris Milne
Subject: Re: SHOWSTOPPER! I cannot display an Irregular2DSet with more
than 3000 points

Hi Chris,

>         My data sets have about 3600 irregularly spaced data
> with X,Y coord and several data values).
> I would like to use visad to display my data and possibly perform some
> interpolation for me. Unfortunately I came across this showstopper. If
> my Irregular2DSet has more than 3000 points then only the first four
> displayed! 3000 displays fine but 3001 fails. I do not think it is
> memory because the behavior is the same if I add -Xmx64m or -Xmx128m
> development machine is a 1.2GPentium 520m Windows 2000 with JDK1.3.1
> OpenGL Java3D1.3)

When you call the Irregular2DSet constructor without a Delaunay
argument, it uses the Delaunay.factory() method to implictly compute
a Delaunay triangulation. 3000 points is the break from Watson's
algorithm to Clarkson's algorithm. So at 3001 points you start
using Clarkson's algorithm. It rounds coordinates to integers.
If your values are small enough that integer rounding will merge
some of them to the same value (and hence create colinear or
colocated points), there will be trouble. One approach is to scale
your coordinates up so integer rounding does not merge values.
Another is to explicitly call 'new DelaunayWatson(samples)' and
pass it to the Irregular2DSet constructor, to ensure you use Watson's

> VisAD is the perfect tool for my application, but it is useless for me
> if I cannot resolve this problem.
> Any suggestions or workarounds would be greatly appreciated.
> Note: Gridded2DSet did not have a problem with 3001+ points, but that
> just draws a huge 'connect the dots' line. I would like to see a
> (or at least a wire frame). I also have a list of triangles, but that
> does not seem to be needed since the tringles seem to be recomputed by
> the flatfield (or something).

If you have a list of triangles, then you can use them to construct
a DelaunayCustom. This will be much faster than running anyone's
Delaunay algorithm. In the 'DelaunayCustom(float[][] samples, int[][]
constructor, tri is dimensioned int[number_of_trianlgles][3] and each
triangle is defined by a set of three indices into the samples[0] array.

Good luck,
Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI  53706
hibbard@xxxxxxxxxxxxxxxxx  608-263-4427  fax: 608-263-6738