/*
* -------------------------------------------------------------------------
* $Id: SplineChart.java,v 1.6 2004/09/01 18:03:10 estewart Exp $
* -------------------------------------------------------------------------
* Copyright (c) 1999 Visual Numerics Inc. All Rights Reserved.
*
* This software is confidential information which is proprietary to
* and a trade secret of Visual Numerics, Inc. Use, duplication or
* disclosure is subject to the terms of an appropriate license
* agreement.
*
* VISUAL NUMERICS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
* SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. VISUAL
* NUMERICS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
* ITS DERIVATIVES.
*--------------------------------------------------------------------------
*/
package com.imsl.demo.chart;
import com.imsl.chart.*;
import com.imsl.math.*;
import java.awt.*;
import javax.swing.*;
public class SplineChart extends JPanel///JApplet
{
private Chart chart = null;
static private final int nData = 21, nSpline = 100;
public void init()
{
chart = new Chart(this);
chart.setDoubleBuffering(true);
chart.getChartTitle().setTitle(new Text("Smoothed Spline"));
Legend legend = chart.getLegend();
legend.setTitle(new Text("Legend"));
//gend.setFillType(legend.FILL_TYPE_SOLID);
//legend.setFillColor(Color.yellow);
legend.setPaint(true);
AxisXY axis = new AxisXY(chart);
Data data;
// Original data
double xData[] = grid(nData);
double yData[] = new double[nData];
for (int k = 0; k < nData; k++) {
yData[k] = f(xData[k]);
}
data = new Data(axis, xData, yData);
data.setDataType(Data.DATA_TYPE_MARKER);
data.setMarkerType(Data.MARKER_TYPE_HOLLOW_CIRCLE);
data.setMarkerColor(Color.green);
data.setTitle("Original Data");
// Noisy data
double yNoisy[] = new double[nData];
for (int k = 0; k < nData; k++) {
yNoisy[k] = yData[k] + (2.*Math.random()-1.);
}
data = new Data(axis, xData, yNoisy);
data.setDataType(Data.DATA_TYPE_MARKER);
data.setMarkerType(Data.MARKER_TYPE_FILLED_SQUARE);
data.setMarkerSize(0.75);
data.setMarkerColor(Color.blue);
data.setTitle("Noisy Data");
chartSpline(axis, new CsSmooth(xData, yData), Color.red, "CsSmooth");
chartSpline(axis, new CsSmoothC2(xData, yData, nData), Color.green, "CsSmoothC2");
new ToolTip(chart);
}
private void chartSpline(AxisXY axis, Spline spline, Color color, String title)
{
Data data = new SplineData(axis, spline);
data.setDataType(Data.DATA_TYPE_LINE);
data.setLineColor(color);
data.setTitle(title);
}
static private double[] grid(int nData)
{
double xData[] = new double[nData];
for (int k = 0; k < nData; k++) {
xData[k] = 3.0*k / (double)(nData-1);
}
return xData;
}
static private double f(double x)
{
return 1.0/(0.1+Math.pow(3.0*(x-1.0),4));
}
public void update(Graphics g)
{
chart.update(g);
}
public void paint(Graphics g)
{
chart.paint(g);
}
public static void main(String argv[])
{
SplineChart ex = null;
JFrame frame = new JFrame();
ex = new SplineChart();
frame.getContentPane().add(ex);
ex.init();
frame.setSize(new Dimension(400,400));
frame.show();
}
}