/* * fspr.java - revised 20 Jan 08 - width 401, height 333 * @author jackord@kw.igs.net * accuracy test of Feynman algorithm * mass on an unstretched spring released from rest */ import java.applet.Applet; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class fspr extends Applet implements ActionListener { int kk=0; String b1s="Test Accuracy"; Button b1=new Button(b1s); public void init() { setBackground(new Color(211, 211, 211)); // Light Gray Background add(b1); b1.addActionListener(this); } public void paint(Graphics g) { g.setColor(Color.black); g.drawRect(0, 32, 400, 300); g.setFont(new Font("TimesRoman", Font.PLAIN, 14)); if (kk>0) { double m, k, gr, dt, t, y, v, a, vo, ym, xsc, ysc; int x1, y1, x2, y2; xsc=400/.83; ysc=300/.23; m=2; k=200; gr=9.8; dt=.005; ym=0; t=0; y=0; v=0; a=-gr-k*y/m; g.setColor(Color.blue); x1=(int)(xsc*(t+.1)); y1=32+(int)(ysc*(.02-y)); v=v+a*dt/2; do { vo=v; t=t+dt; y=y+v*dt; a=-gr-k*y/m; v=v+a*dt; x2=(int)(xsc*(t+.1)); y2=32+(int)(ysc*(.02-y)); g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; if ((vo<0) && (v>=0)) { ym=y; } } while ((vo<0) || (v>=0)); t=t+dt/2-v/a; g.setColor(Color.black); g.drawString("Ymin = "+(float)ym+" (expect "+(float)(-2*m*gr/k)+")", 85, 52); g.drawString("Yret = "+(float)y+" (expect 0)", 85, 72); g.drawString("Time = "+(float)t+" (expect "+(float)(.2*Math.PI)+")", 85, 92); } kk=0; } public void actionPerformed(ActionEvent e) { // Button String tst; tst=e.getActionCommand(); if (b1s.equals(tst)) { kk=1; } repaint(); } }