package graph;
import java.awt.*;
import java.applet.*;
import java.net.URL;
import java.util.*;
import java.io.InputStream;
/*
**************************************************************************
**
** Class Contour
**
**************************************************************************
** Copyright (C) 1996 Leigh Brookshaw
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program 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 program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**************************************************************************
**
** This class extends the interactive graphics class to incorporate
** contours.
**
*************************************************************************/
/**
* This class extends the interactive graphics class G2Dint to incorporate
* contouring.
*
* @version $Revision: 1.11 $, $Date: 1996/08/12 23:37:08 $.
* @author Leigh Brookshaw
*/
public class Contour extends G2Dint {
/*
**************
**
** Constants
**
*************/
/*
** The minimum length of a curve before it gets a label
*/
static final int MINCELLS = 30;
/*
** Default number of contour levels
*/
static final int NLEVELS = 12;
/**********************
**
** Protected Variables
**
***********************/
/**
* Dimension of the contour grid in the X direction
*/
protected int nx;
/**
* Dimension of the contour grid in the Y direction
*/
protected int ny;
/**
* Vector array containing the Contour curves.
* Each index in the array contains curves at a given
* contour level
*/
protected Vector curves[];
/**
* If set the class calculates the contour levels based on
* the data minimum and maximum. Default value true.
*/
protected boolean autoLevels;
/*
* If true the contour levels are calculated in
* logarithmic intervals
*/
protected boolean logLevels;
/*
* If true the limits of the plot are the limits of the
* data grid not the limits of the contours!
*/
protected boolean gridLimits;
/*
* The array of contour levels
*/
protected double levels[];
/**
* The label for each contour level
*/
protected TextLine labels[];
/**
* Font to use in drawing Labels
*/
protected Font labelfont;
/**
* Color to use in drawing Labels
*/
protected Color labelcolor;
/**
* Style to use in drawing Labels. TextLine.SCIENTIFIC or
* TextLine.ALGEBRAIC.
*/
protected int labelStyle;
/**
* Precision to use in drawing Labels.
*/
protected int labelPrecision;
/**
* Number of Significant figures to use in drawing Labels.
*/
protected int labelSignificant;
/**
* Which levels will get labels. If it is equal to 1 every level
* gets a label, equal to 2 every second level etc. If it is equal to 0
* no labels are displayed.
*/
protected int labelLevels;
/**
* If false labels are not drawn
*/
protected boolean drawlabels;
/**
* If true the labels will be calculated for each
* contour level. These might not look all that hot.
*/
protected boolean autoLabels;
/**
* Color to draw non labelled contour line
*/
protected Color contourColor;
/**
* Color to draw labelled contour line
*/
protected Color labelledColor;
/**
* The data grid, a 2D array stored in linear form.
* It is assumed that [0,0] is the bottom left corner
* and the data is ordered by row.
*/
protected double grid[];
/**
* The X minimum limit of the data grid
*/
protected double xmin;
/**
* The X maximum limit of the data grid
*/
protected double xmax;
/**
* The Y minimum limit of the data grid
*/
protected double ymin;
/**
* The Y maximum limit of the data grid
*/
protected double ymax;
/**
* The minimum value of the grid values
*/
protected double zmin;
/**
* The maximum value of the grid values
*/
protected double zmax;
/**
* Boolean value if true Contours will not be calculated
*/
public boolean noContours = false;
/*
*****************
**
** Constructors
**
****************/
/**
* Instantaite the class
*/
public Contour() {
grid = null;
xmin = 0.0;
xmax = 0.0;
ymin = 0.0;
ymax = 0.0;
zmin = 0.0;
zmax = 0.0;
nx = 0;
ny = 0;
levels = new double[NLEVELS];
labels = new TextLine[NLEVELS];
autoLevels = true;
logLevels = false;
gridLimits = false;
autoLabels = true;
labelfont = new Font("Helvetica",Font.PLAIN,12);
labelcolor = Color.blue;
labelLevels = 1;
labelStyle = TextLine.ALGEBRAIC;
labelPrecision = 2;
labelSignificant = 3;
drawlabels = true;
contourColor = null;
labelledColor = null;
curves = null;
}
/*
************
**
** Methods
**
***********/
/**
* Load the grid to contour from a URL. There are 2 formats for the data
* optionally the limits of the grid can be parsed.
*
* The expected format of the data * 1st Number: nx * 2nd Number: ny * nx*ny numbers following * * Optionally * 1st Number: nx * 2nd Number: ny * 3rd Number: xmin * 4th Number: xmax * 5th Number: ymin * 6th Number: ymax * nx*ny numbers following *