NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Hi, I agree with Bill that you should use DelaunayWatson where appropriate. In general, for less than a few thousand points in 2D, the Watson algorithm will perform more efficiently than Clarkson, because Clarkson has more structural overhead. However, Watson is O(n^2) and supports only 2D, whereas Clarkson is O(n log n) and supports higher dimensional data. Unfortunately, both algorithms have limitations. Both can have problems with colinear and/or colocated points. I have seen Watson generate overlapping triangles on rare occasion. And the Clarkson algorithm truncates all values to integers during computation, exascerbating the colinearity issue. To work around these issues, we have provided two methods in visad.Delaunay, scale and perturb. The scale method scales data by a given multiplier, which is useful if you have values clumped within 1.0f of one another and wish to use the Clarkson algorithm. (Clarkson will fail horribly with such data unless scaled so that data points are distinct as integers). The perturb method randomly permutes each sample up to a given epsilon, to help "shake up" colinear and colocated points. In your example, if I add the call: Delaunay.scale(samples, 2, false); before constructing the DelaunayClarkson object, then the triangulation finishes without exception. There was talk a while back of integrating the TRIANGLE package ( http://people.sc.fsu.edu/~burkardt/c_src/triangle/triangle.html) into VisAD to improve our triangulation logic, but unfortunately it is not a priority for us right now. -Curtis On Sat, Apr 4, 2009 at 8:35 AM, Bill Hibbard <hiding@xxxxxxxxx> wrote: > It looks like you've found a bug in the DelaunayClarkson > code. As I recall, a programmer at SSEC converted > Clarkson's C code to Java at least ten years ago. Perhaps > someone will try to hunt down this bug. But since your data > set is small and has dimension = 2, I recommend that you > try replacing the call to the DelaunayClarkson constructor > with: > > DelaunayWatson d = new DelaunayWatson(samples); > > Good luck, > Bill > > ----- Original Message ----- > From: "áÂÁËÕÍÏ× áÎÄÒÅÊ" > To: visad@xxxxxxxxxxxxxxxx > Subject: Re: [visad] The results of your email commands > Date: Sat, 4 Apr 2009 15:56:05 +0400 > > > Hello, all! > I try to use Delaunay triangulation in the following way: > > /*five 2d points*/ > float[][] samples = { > {0.0f, 0.1f, 0.2f, 0.3f, 0.4f}, > {0.0f, 0.5f, 0.0f, 0.5f, 0.0f} > }; > DelaunayClarkson d = new DelaunayClarkson(samples); > > But get an exception > Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 > at visad.DelaunayClarkson.(DelaunayClarkson.java:1120) > at Test.main(Test.java:95) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > > Can you tell me, please, what is the trouble? > thaks! > > _______________________________________________ > visad mailing list > visad@xxxxxxxxxxxxxxxx > For list information, to unsubscribe, visit: > http://www.unidata.ucar.edu/mailing_lists/ > > > -- Be Yourself @ mail.com! > Choose From 200+ Email Addresses > Get a *Free* Account at www.mail.com <http://www.mail.com/Product.aspx>! > > _______________________________________________ > visad mailing list > visad@xxxxxxxxxxxxxxxx > For list information, to unsubscribe, visit: > http://www.unidata.ucar.edu/mailing_lists/ > >
visad
archives: