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 Andrew, > At the moment we are using bom/FlexibleTrackManipulation.java > to plot cyclone locations, and another class I wrote to draw straight > lines between these points. > > Some forecasters aren't happy with just imagining curvy lines > in between, they want them drawn that way. > My plan is to create extra points between the cyclone locations, > which are along a quadratic which passes through the cyclone locations, > and then draw straight lines between them. > > Is there anything in Visad that already helps do this? I think > there is some spline stuff in there, but I've got no idea what it > does. I'd like to use any infrastructure that already exists. > > I would also probably need to do some projectionControl listening > to figure out how many points to insert between the cyclone locations. > Is that the best way? I suspect it gives a visual lag, which is not > apparent in your front drawing stuff, which seems similar. Is it's > method relevent here? The code in visad/paoloa/spline uses native code for the heavy math. And it was written by Paolo Antonelli so I don't know much about it. There is also some 2-D spline code for satellite image navigation, but it would be hard to adapt. If you need spline code, its probably best to just write your own. However, there is some code in visad/bom/FrontDrawer.java that may help you. It basically smooths a hand drawn curve (in a Gridded2DSet with manifold dimension = 1) as follows (with some code editing for clarity): curve_samples = curve_set.getSamples(false); float[][] curve = new float[2][]; // convert (lat, lon) curve to (x, y) graphics coordinates curve[0] = lat_map.scaleValues(curve_samples[lat_index]); curve[1] = lon_map.scaleValues(curve_samples[lon_index]); // lowpass filter curve curve = smooth_curve(old_curve, fw); // resample smoothed curve curve = resample_curve(curve, increment); Rather than using a ProjectionControl, it simply uses ScalarMap.scaleValues() to convert (lat, lon) values to (x, y) graphics values and does its smoothing work in those coordinates. The smooth_curve() method is a simple low pass filter, and the resample_curve() method resamples to evenly spaced samples. You could experiment with various combinations of resampling and smoothing, and possibly also spline fitting, to get the desired behavior. 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
visad
archives: