package jmslexamples; import java.awt.*; import com.softsynth.jmsl.util.Bessel; /** * BesselDemo.java * * Graph integer order Bessel functions, superimposed on one canvas. * * @author Phil Burk and Nick Didkovsky */ /* * (C) 1997 Phil Burk and Nick Didkovsky, All Rights Reserved JMSL is based upon * HMSL (C) Phil Burk, Larry Polansky and David Rosenboom. */ public class BesselDemo extends Frame { public void init() { BesselCanvas canvas = new BesselCanvas(); canvas.setSize(BesselCanvas.WIDTH, BesselCanvas.HEIGHT); add(canvas); } public static void main(String args[]) { BesselDemo demo = new BesselDemo(); demo.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); demo.init(); demo.pack(); demo.setVisible(true); } } class BesselCanvas extends Canvas { public static final int WIDTH = 1000; public static final int HEIGHT = 200; public static final double RANGE = 10.0; Color[] colors = { Color.black, Color.blue, Color.green, Color.red, Color.orange }; public void paint(Graphics g) { int newY; for (int n = 0; n < 5; n++) { // order for (int step = 0; step < WIDTH; step++) { // range over x double x = step * RANGE / WIDTH * 2; if (n == 0) newY = (int) (HEIGHT - (HEIGHT / 2 * Bessel.bessj0(x) + HEIGHT / 2)); else if (n == 1) newY = (int) (HEIGHT - (HEIGHT / 2 * Bessel.bessj1(x) + HEIGHT / 2)); else newY = (int) (HEIGHT - (HEIGHT / 2 * Bessel.bessj(n, x) + HEIGHT / 2)); g.setColor(colors[n]); g.drawLine(step, newY, step, newY); } g.drawString("J" + n, 10, 120 + 15 * n); } } }