/* * h5c.java - revised 19 Apr 05 - width 401, height 301 * @author jackord@kw.igs.net * the two lowest energy states of a double well (an infinite square well * with a central barrier) */ import java.applet.Applet; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class h5c extends Applet implements ActionListener { int kk=0; int first=0; int n; // Declarations String b1s="State1"; Button b1=new Button(b1s); String b2s="State2"; Button b2=new Button(b2s); public void init() { setBackground(new Color(211, 211, 211)); add(b1); b1.addActionListener(this); add(b2); b2.addActionListener(this); } double fey(double e, Graphics g) { // Feynman Algorithm double y, v, a, c; int y1, y2; int dx=1; c=Math.PI/400; c=c*c; a=-e*c; y=0; v=2; y1=150; for (int i=1; i<=n; i=i+1) { y=y+v*dx; y2=150-(int)(y); g.drawLine(i-1, y1, i, y2); y1=y2; if (i==192) { a=(200-e)*c; } if (i==209) { a=-e*c; } v=v+a*y*dx; } if (kk==1) { y=v-a*y*dx/2; } return y; } public void paint(Graphics g) { double e, de, yb, yc, b, c; if (first==0) { b1.setBounds(25, 200, 60, 20); b2.setBounds(105, 200, 60, 20); first=1; } g.setColor(Color.green); g.fillRect(192, 0, 16, 300); g.setColor(Color.black); g.drawRect(0, 0, 400, 300); g.drawLine(0, 150, 400, 150); n=200; g.setColor(Color.blue); if (kk>0) { b=3.8; c=4.2; de=0.00001; // Bisection Algorithm yb=fey(b, g); yc=fey(c, g); if (yb*yc<0) { while ((c-b)>de) { e=(b+c)/2; if (fey(e, g)*yb>0) { b=e; } else { c=e; } } g.setColor(Color.red); e=(b+c)/2; n=400; yb=fey(e, g); g.drawString("E"+kk+" ="+(float)e, 50, 240); } } kk=0; } public void actionPerformed(ActionEvent e) { // Buttons String tst; tst=e.getActionCommand(); if (b1s.equals(tst)) { kk=1; } if (b2s.equals(tst)) { kk=2; } repaint(); } }