import java.applet.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import shtick.math.FourierBasis; import shtick.math.FourierSeries; ////////////////////////////////////////////////////// //**************************************************// //* FourierDemo1 Applet *// //* *// //* Version 1.2.1 *// //* Author: Sean M. Cox *// //* Organization: The Shtick *// //* http://www.smcox.com/ *// //* *// //* Demonstrates, in detail, the use of the *// //* Fourier Transform to model periodic functions. *// //* *// //**************************************************// ////////////////////////////////////////////////////// public class FourierDemo extends Applet implements ActionListener{ private int harmonics=10; // How many harmonics deep shall we go private static int dataWidth=60; private double[] data=new double[dataWidth]; private double[] sineSeries; private double[] cosineSeries; private String error=""; private Button lessButton; private Button moreButton; private FourierSeries series; private FourierBasis basis; public FourierDemo(){ lessButton= new Button("Less"); moreButton= new Button("More"); setLayout(null); } public void init() { add(lessButton); add(moreButton); lessButton.addActionListener(this); moreButton.addActionListener(this); lessButton.setBounds(20,140,lessButton.getPreferredSize().width,lessButton.getPreferredSize().height); moreButton.setBounds(152,140,moreButton.getPreferredSize().width,moreButton.getPreferredSize().height); for (int x=0;x<60; x++) { data[x]=Function(.5+x); } basis = new FourierBasis(dataWidth); series = new FourierSeries(data, basis); series.translate(); cosineSeries=series.getCosineSeries(); sineSeries=series.getSineSeries(); } /** * Paint it. */ public void paint(Graphics g) { g.setColor(Color.black); g.drawString("Function",4,16); g.drawRect(0, 20, 61, 80); g.drawString("Function with approximation superimposed",10,116); g.drawRect(71, 120, 61, 80); g.drawString("Fourier Aproximation",118,16); g.drawRect(142, 20, 61, 80); g.drawString("Number of",63,32); g.drawString("Harmonics:"+harmonics,63,44); double tally=cosineSeries[0]; for (int h=1;h0)){ harmonics--; repaint(); } if (ae.getActionCommand().equals("More") & ((harmonics)<(dataWidth/2))){ harmonics++; repaint(); } } private double Function(double x){ if (x>30) return (double)60; return (double)20; } public String getAppletInfo() { return "A fourier series demo by Sean M. Cox"; } }