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 Vikram: I've been through this myself in the past year (since my math background is not strong I've had to learn a bunch of terminology), so I'd like to add a couple of things to Bill's reply in the hopes it might help you, too. First, the Developer's Guide Section 2 has a nice diagram that for me help solidify some of these relationships within the VisAD contexts: FunctionType (image_sequence_type) / \ function domain function range RealType (hour) FunctionType (image_type) / \ function domain function range RealTupleType RealType(brightness) / \ RealType (line) RealType (element) Secondly, I always like examples. Just below is very short and completely self-contained (well, except for using VisAD ;-) application that might help illustrate two uses of domains and ranges: one to define the function mapping ((line,element) - > brightness) and the other to illustrate overriding the default range on the Y axis. I did this primarily to better understand the relationships between the MathTypes and the Data. import visad.*; import visad.java2d.DisplayImplJ2D; import java.io.IOException; import java.awt.*; import java.awt.event.*; import javax.swing.*; /* very, very simple display example. Define a function that maps from * (line,element) to a brightness value. Create a FlatField that * realizes this mapping for a domain of (300,300). Fill the FlatField * with values in the range (0-255). * * Create ScalaMappings of (line->YAxis), (element->XAxis) and * (brightness -> RGB). * * Also, set a range on the ScalaMap for the YAxis to illustrate the * effect/use of this. */ public class vt { public static void main(String args[]) throws VisADException, IOException { // define types RealType line = new RealType("row"); RealType element = new RealType("col"); RealTupleType domain = new RealTupleType(line, element); RealType brightness = new RealType("brightness"); RealTupleType range = new RealTupleType(brightness); FunctionType image_func = new FunctionType(domain, range); // now, define the Data objects Set domain_set = new Integer2DSet(300,300); FlatField image_data = new FlatField(image_func, domain_set); // make up some data (line,element) => brightness values double[][] values = new double[1][300*300]; for (int i=0; i<300; i++) { for (int j=0; j<300; j++) { values[0][i + 300*j] = ((16*i)/300.) * ((16*j)/300); } } // put the data into the flatfield image_data.setSamples(values); // now make a reference for the data so it can be displayed DataReference image_ref =new DataReferenceImpl("image"); image_ref.setData(image_data); // define the mappings of the display DisplayImpl di = new DisplayImplJ2D("display"); // override the default range on display's Y axis ScalarMap line_map = new ScalarMap(line, Display.YAxis); line_map.setRange(-100,400); di.addMap(line_map); di.addMap(new ScalarMap(element, Display.XAxis)); di.addMap(new ScalarMap(brightness, Display.RGB)); // add the data reference di.addReference(image_ref); // create JFrame (i.e., a window) for display and slider // (cobbled from the DisplayTest examples) JFrame frame = new JFrame("Simple VisAD Application"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); // create JPanel in JFrame JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setAlignmentY(JPanel.TOP_ALIGNMENT); panel.setAlignmentX(JPanel.LEFT_ALIGNMENT); frame.getContentPane().add(panel); panel.add(di.getComponent()); // set size of JFrame and make it visible frame.setSize(500, 600); frame.setVisible(true); } } Hope it helps... tom -- Tom Whittaker (tomw@xxxxxxxxxxxxx) University of Wisconsin-Madison Space Science and Engineering Center Phone/VoiceMail: 608/262-2759 Fax: 608/263-6738
visad
archives: