Hello,
i am just start learning this powerful visualisation library and now
some questions come up.
When i use Linear*DSet with arithmetic progression, i get different
visualisation results when first/last arguments are quite high.
For example, if i use this
domain_set = new Linear2DSet(domain_tuple, 0.0, NROWS, NROWS,
0, NCOLS, NCOLS);
the plot looks fine.
But when i use
long xEnd=System.currentTimeMillis();
long xStart = xEnd-NCOLS;
domain_set = new Linear2DSet(domain_tuple, 0.0, NROWS, NROWS,
0, NCOLS, NCOLS);
(Look at the attachment for a full working example , line 112ff)
The plot looks very strange.
I expect that the plot is the same except the labels of the xAxis.
Maybe someone can give me a hint?
Or do i have to set the Axis values in an other way?
Thanks,
Stefan Below
/*
VisAD Tutorial
Copyright (C) 2000 Ugo Taddei
*/
package y;
// Import needed classes
import visad.*;
import visad.java2d.DisplayImplJ2D;
import java.rmi.RemoteException;
import javax.swing.*;
/**
VisAD Tutorial example 3_01
A function pixel_value = f(row, column)
with MathType ( (row, column) -> pixel ) is plotted
The domain set is an Integer1DSet
Run program with "java P3_01"
*/
public class FlowTest{
// Declare variables
// The quantities to be displayed in x- and y-axes: row and column
// The quantity pixel will be mapped to RGB color
private RealType row, column;
// A Tuple, to pack row and column together, as the domain
private RealTupleType domain_tuple;
// The function ( (row, column) -> pixel )
// That is, (domain_tuple -> pixel )
private FunctionType func_dom_pix;
// Our Data values for the domain are represented by the Set
private Set domain_set;
// The Data class FlatField
private FlatField vals_ff;
// The DataReference from data to display
private DataReferenceImpl data_ref;
// The 2D display, and its the maps
private DisplayImpl display;
private ScalarMap rowMap, colMap, pixMap;
private RealType pixelX;
private RealType pixelY;
private ScalarMap pixMapX;
private ScalarMap pixMapY;
public FlowTest(String []args)
throws RemoteException, VisADException {
// Create the quantities
// Use RealType(String name);
row = RealType.getRealType("ROW");
Unit scale = CommonUnit.secondsSinceTheEpoch.scale(0.001);
column = RealType.getRealType("COLUMN",scale);
domain_tuple = new RealTupleType(row, column);
pixelX = RealType.getRealType("flowX");
pixelY = RealType.getRealType("flowY");
RealTupleType fuunc_Tuple = new RealTupleType(pixelX,pixelY);
// Create a FunctionType (domain_tuple -> pixel )
// Use FunctionType(MathType domain, MathType range)
func_dom_pix = new FunctionType( domain_tuple, fuunc_Tuple);
// Create the domain Set, with 5 columns and 6 rows, using an
// Integer2DSet(MathType type, int lengthX, lengthY)
int NCOLS = 5;
int NROWS = 6;
// modify Axis scale
// long t=System.currentTimeMillis();
long t=100000000;
long xStart = t-NCOLS;
//
long xEnd = t;
System.err.println(domain_tuple);
// domain_set = new Linear2DSet(domain_tuple, 0.0, NROWS, NROWS,
// 0, NCOLS, NCOLS);
//
domain_set = new Linear2DSet(domain_tuple, 0.0, NROWS, NROWS,
xStart, xEnd, NCOLS);
System.err.println(domain_set);
// Our pixel values, given as a float[6][5] array
float[][] pixel_vals1 = new float[][]{{0, 6, 12, 18, 24},
{1, 7, 12, 19, 25},
{2, 8, 14, 20, 26},
{3, 9, 15, 21, 27},
{4, 10, 16, 22, 28},
{5, 11, 17, 23, 29} };
float[][] pixel_vals2 = new float[][]{{0, 6, 12, 18, 24},
{1, 7, 12, 19, 25},
{2, 8, 14, 20, 26},
{3, 9, 15, 21, 27},
{4, 10, 16, 22, 28},
{5, 11, 17, 23, 29} };
// We create another array, with the same number of elements of
// pixel_vals[][], but organized as float[1][ number_of_samples ]
float[][] flat_samples = new float[2][NCOLS * NROWS];
// ...and then we fill our 'flat' array with the original values
// Note that the pixel values indicate the order in which these values
// are stored in flat_samples
for(int c = 0; c < NCOLS; c++)
for(int r = 0; r < NROWS; r++){
flat_samples[0][ c * NROWS + r ] = pixel_vals1[r][c];
flat_samples[0][ c * NROWS + r ] = pixel_vals2[r][c];
}
// Create a FlatField
// Use FlatField(FunctionType type, Set domain_set)
vals_ff = new FlatField( func_dom_pix, domain_set);
// ...and put the pixel values above into it
vals_ff.setSamples( flat_samples );
// Create Display and its maps
// A 2D display
display = new DisplayImplJ2D("display1");
// Get display's graphics mode control and draw scales
GraphicsModeControl dispGMC = (GraphicsModeControl)
display.getGraphicsModeControl();
dispGMC.setScaleEnable(true);
// Create the ScalarMaps: column to XAxis, row to YAxis and pixel to RGB
// Use ScalarMap(ScalarType scalar, DisplayRealType display_scalar)
colMap = new ScalarMap( column, Display.XAxis );
rowMap = new ScalarMap( row, Display.YAxis );
pixMapX = new ScalarMap( pixelX, Display.Flow1X );
pixMapY = new ScalarMap( pixelY, Display.Flow1Y );
// Add maps to display
display.addMap( colMap );
display.addMap( rowMap );
display.addMap( pixMapX );
display.addMap( pixMapY );
FlowControl control = (FlowControl) pixMapX.getControl();
control.setArrowScale(0.1f);
control.setFlowScale(0.3f);
// Create a data reference and set the FlatField as our data
data_ref = new DataReferenceImpl("data_ref");
data_ref.setData( vals_ff );
// Add reference to display
display.addReference( data_ref );
// Create application window and add display to window
JFrame jframe = new JFrame("VisAD Tutorial example 3_01");
jframe.getContentPane().add(display.getComponent());
// Set window size and make it visible
jframe.setSize(300, 300);
jframe.setVisible(true);
}
public static void main(String[] args)
throws RemoteException, VisADException
{
new FlowTest(args);
}
} //end of Visad Tutorial Program 3_01