/* * fosc.java - revised 7 Apr 05 - width 401, height 401 * @author jackord@kw.igs.net * phase diagram for the damped oscillator * - overdamped: Q = 1/3 * - critical damping: Q = 1/2 * - underdamped: Q = 1 */ import java.applet.Applet; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class fosc extends Applet implements ActionListener { int kk=0; // Declarations String b1s="Plot"; Button b1=new Button(b1s); Choice cho1=new Choice(); public void init() { cho1.addItem("Q=1"); cho1.addItem("Q=1/2"); cho1.addItem("Q=1/3"); add(b1); add(cho1); b1.addActionListener(this); setBackground(new Color(211, 211, 211)); // Light Gray Background cho1.setBackground(getBackground()); } public void paint(Graphics g) { // Paint int x1, y1, x2, y2; int n=1000; double rq, phi, s, dt, x, v, dv; String z="Underdamped"; if (kk==0) { b1.setBounds(75, 5, 55, 20); cho1.setBounds(5, 5, 60, 20); kk=1; } rq=1+cho1.getSelectedIndex(); dt=.01; g.setColor(Color.black); g.drawRect(0, 0, 400, 400); g.drawLine(0, 200, 400, 200); g.drawLine(200, 0, 200, 400); g.setColor(Color.red); g.drawArc(20, 20, 360, 360, 0, 360); if (kk==2) { g.setColor(Color.blue); for (int j=0; j<=35; j=j+1) { phi=j*Math.PI/18; x=Math.cos(phi); v=Math.sin(phi); x1=200+(int)(180*x); y1=200-(int)(180*v); dv=-(rq*v+x)*dt; v=v+dv/2; // Feynman half-step for (int i=1; i<=n; i=i+1) { // Feynman loop x=x+v*dt; dv=-(rq*(v+dv/2)+x)*dt; v=v+dv; x2=200+(int)(180*x); y2=200-(int)(180*(v-dv/2)); g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } } if (rq==2) { g.setColor(Color.green); g.drawLine(0, 0, 400, 400); z="Critically Damped"; } if (rq==3) { s=(3+Math.sqrt(5))/2; x1=200-(int)(200/s); y1=0; x2=200+(int)(200/s); y2=400; g.setColor(Color.green); g.drawLine(x1, y1, x2, y2); z="Overdamped"; } g.setColor(Color.black); g.drawString(z, 275, 18); kk=1; } } public void actionPerformed(ActionEvent e) { String tst; tst=e.getActionCommand(); if (b1s.equals(tst)) { kk=2; } repaint(); } }