/*
* Open Source Physics software is free software as described near the bottom of this code file.
*
* For additional information and documentation on Open Source Physics please see:
* <http://www.opensourcephysics.org/>
*/
package org.opensourcephysics.display2d;
/**
* The GridData interface defines methods for objects that store
* data on a grid.
*
* @author Wolfgang Christian
* @created Dec 28, 2003
* @version 1.0
*/
public interface GridData {
/**
* Estimates the value of a component at an untabulated point, (x,y).
*
* Interpolate often uses bilinear interpolation on the grid. Although the interpolating
* function is continous across the cell boundaries, the gradient changes discontinuously
* at the cell boundaries.
*
* @param x the untabulated x
* @param y the untabulated y
* @param component the component index
* @return the interpolated sample
*/
public double interpolate(double x, double y, int component);
/**
* Estimates multiple sample components at an untabulated point, (x,y).
*
* Interpolate uses bilinear interpolation on the grid. Although the interpolating
* function is continous across the cell boundaries, the gradient changes discontinuously
* at the cell boundaries.
*
* @param x the untabulated x
* @param y the untabulated y
* @param indexes to be interpolated
* @param values the array that will contain the interpolated values
* @return the interpolated array
*/
public double[] interpolate(double x, double y, int[] indexes, double[] values);
/**
* Sets the the grid data using a lattice model and clears the cellScale flag.
*
* The left, right, top, and bottom bounds match the max and min values.
*
* @param xmin
* @param xmax
* @param ymin
* @param ymax
*/
public void setScale(double xmin, double xmax, double ymin, double ymax);
/**
* Sets the left, right, bottom, and top bounds of the grid using a cell model and sets the cellScale flag.
*
* Coordinates are centered on each cell and are inside the bounds.
*
* @param left
* @param right
* @param bottom
* @param top
*/
public void setCellScale(double left, double right, double bottom, double top);
/**
* Sets the grid such the centers of the corner cells match the given coordinates.
*
* Coordinates are centered on each cell and the bounds are ouside the max and min values.
*
* @param xmin
* @param xmax
* @param ymin
* @param ymax
*/
public void setCenteredCellScale(double xmin, double xmax, double ymin, double ymax);
/**
* Gets the cellData flag.
*
* @return true if cell data.
*/
public boolean isCellData();
/**
* Sets the name of the component.
*
* @param component int
* @param name String
*/
public void setComponentName(int component, String name);
/**
* Gets the name of the component
* @param i int
* @return String
*/
public String getComponentName(int i);
/**
* Gets the number of data components.
*
* @return int
*/
public int getComponentCount();
/**
* Gets the value of the given component at the given location.
*
* @param ix x index
* @param iy y index
* @param component
* @return the value.
*/
public double getValue(int ix, int iy, int component);
/**
* Sets the value of the given component at the given location.
*
* @param ix x index
* @param iy y index
* @param component
* @param value
*/
public void setValue(int ix, int iy, int component, double value);
/**
* Gets the number of x entries.
* @return nx
*/
public int getNx();
/**
* Gets the number of y entries.
* @return ny
*/
public int getNy();
/**
* Gets the array containing the data.
*
* @return the data
*/
public double[][][] getData();
/**
* Gets the minimum and maximum values of the n-th component.
* @return {zmin,zmax}
*/
public double[] getZRange(int n);
/**
* Gets the x value for the first column in the grid.
* @return the leftmost x value
*/
public double getLeft();
/**
* Gets the x value for the right column in the grid.
* @return the rightmost x value
*/
public double getRight();
/**
* Gets the y value for the first row of the grid.
* @return the topmost y value
*/
public double getTop();
/**
* Gets the y value for the last row of the grid.
* @return the bottommost y value
*/
public double getBottom();
/**
* Gets the change in x between grid columns moving from right to left.
* @return the change in x
*/
public double getDx();
/**
* Gets the change in y between grid rows moving from top to bottom.
* The change in y is usually negative because y values usually decrease as pixel coordinates increase from top to bottom on a computer screen.
* @return the change in y
*/
public double getDy();
/**
* Gets the x coordinate for the given index.
*
* @param i int
* @return double the x coordinate
*/
public double indexToX(int i);
/**
* Gets the y coordinate for the given index.
*
* @param i int
* @return double the y coordinate
*/
public double indexToY(int i);
/**
* Gets closest index from the given x world coordinate.
*
* @param x double the coordinate
* @return int the index
*/
public int xToIndex(double x);
/**
* Gets closest index from the given y world coordinate.
*
* @param y double the coordinate
* @return int the index
*/
public int yToIndex(double y);
}
/*
* Open Source Physics software is free software; you can redistribute
* it and/or modify it under the terms of the GNU General Public License (GPL) as
* published by the Free Software Foundation; either version 2 of the License,
* or(at your option) any later version.
* Code that uses any portion of the code in the org.opensourcephysics package
* or any subpackage (subdirectory) of this package must must also be be released
* under the GNU GPL license.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307 USA
* or view the license online at http://www.gnu.org/copyleft/gpl.html
*
* Copyright (c) 2007 The Open Source Physics project
* http://www.opensourcephysics.org
*/