Aquí tienes el código fuente del applet. 



import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.Double;


class Dibujo extends Panel{

  int puntos;
  double[] senos;
  double[] cosenos;

  int[] pts1;
  int[] pts2;

  public void establecerk0(double k0,double anchuraPozo){

  puntos = 501;
  senos = new double [puntos];
  cosenos=new double [puntos];

  pts1 = new int [puntos];
  pts2 = new int [puntos];

  for (int i=0; i < puntos; i++) {

     double xreal = (k0/(puntos*0.8/0.9))*i;
     if (Math.tan(xreal*anchuraPozo/2.0)>0){
     senos[i]= +5.0;
     cosenos[i]= -Math.abs(Math.cos(xreal*anchuraPozo/2.0));
     }
     else{
     senos[i]= -Math.abs(Math.sin(xreal*anchuraPozo/2.0));
     cosenos[i]= +5.0;
     }

  }
  repaint();
  }


  public void paint(Graphics g){

       int anchuraMax = getWidth();
       double pasoH = (double)(anchuraMax*0.9)/(double)puntos;
       int alturaMax = getHeight();
       g.setColor(Color.black);
       g.drawLine(0,(int)(alturaMax*0.9),anchuraMax,(int)(alturaMax*0.9));
       g.drawLine((int)(anchuraMax*0.1),0,(int)(anchuraMax*0.1),alturaMax);
       g.translate((int)(anchuraMax*0.1),(int)(alturaMax*0.9));
       g.drawLine((int)(0.8*anchuraMax),0,(int)(0.8*anchuraMax),-(int)(0.6*alturaMax));

       g.drawString("k0",(int)(0.8*anchuraMax),(int)(0.05*alturaMax));
       g.setColor(Color.green);
       g.drawLine(0,0,(int)(0.9*anchuraMax),-(int)(0.9*0.6/0.8*alturaMax));
       for(int i = 0; i < puntos; i++){
         pts1[i] = (int)(senos[i] * alturaMax*0.6);
         pts2[i] = (int)(cosenos[i] * alturaMax*0.6);

         }
       g.setColor(Color.blue);
       for(int i=1; i <puntos;i++){

         int x1 = (int)((i-1)*pasoH);
         int x2 = (int)(i*pasoH);
         int y1 = pts1[i-1];
         int y2 = pts1[i];
         int z1 = pts2[i-1];
         int z2 = pts2[i];


         g.setColor(Color.blue);
         if (y1<0 && y2<0){
         g.drawLine(x1,y1,x2,y2);}
         g.setColor(Color.red);
         if (z1<0 && z2<0){
         g.drawLine(x1,z1,x2,z2);}

       }
  }
}







public class PozoFinito extends Applet {


  Dibujo seno= new Dibujo();

  TextField V0 = new TextField(5);
  Label V0Label = new Label("V0");
  TextField a = new TextField(5);
  Label aLabel = new Label ("eV. Ancho del pozo");
  TextField niveles = new TextField(5);
  Label nivelesLabel = new Label ("A.   Niveles");
  Label k0Label = new Label ("k0 ");
  TextField k0Text = new TextField(5);
  Label nivelBuscar = new Label ("1/A.   El nivel ");
  TextField nivel = new TextField(5);
  Label knivelLabel = new Label(" tiene una k:");
  TextField nivelBuscado = new TextField(5);
  Label unidad = new Label("1/A");
  Button accion=new Button("Dibuja");
  public void init(){
    setLayout(new BorderLayout());
    Panel datoPanel=new Panel();
    Panel resultados = new Panel();
    add("Center",seno);
    Button accion=new Button("Dibuja");
    datoPanel.add(V0Label);
    datoPanel.add(V0);
    datoPanel.add(aLabel);
    datoPanel.add(a);
    datoPanel.add(nivelesLabel);
    datoPanel.add(niveles);

    resultados.add(k0Label);
    resultados.add(k0Text);
    resultados.add(nivelBuscar);
    resultados.add(nivel);
    resultados.add(knivelLabel);
    resultados.add(nivelBuscado);
    resultados.add(unidad);
    resultados.add(accion);
    add("North",datoPanel);
    add("South",resultados);
    V0.setText("10.0");
    a.setText("6.0");
    niveles.setText("4");
    nivel.setText("1");
    seno.establecerk0(Math.sqrt(20/27.2),6.0/0.52917);
    }
  public boolean action(Event e, Object o){
    double anc=Double.parseDouble(a.getText())/0.52917;
    double Vcero=(Double.parseDouble(V0.getText()))/27.2;
    double kcero=Math.sqrt(2*Vcero);
    k0Text.setText(String.valueOf(kcero/0.5297));
    seno.establecerk0(kcero,anc);
    int numeroNiveles = 1+ (int)(kcero*anc/Math.PI);
    niveles.setText(String.valueOf(numeroNiveles));
    int n=Integer.parseInt(nivel.getText());
    double kredNivel=0;
    if (n > 0 && n < (numeroNiveles+1)){
    kredNivel = buscanivel(kcero,anc,1.0*(n-1),1.0*n);
    nivelBuscado.setText(String.valueOf(kredNivel/anc*Math.PI/0.5297));
    }
    else{ nivelBuscado.setText("cabrito!!!");}

    return true;
  }
  public double buscanivel(double k0,double a,double left, double right){
      double med=(right+left)/2.0;
      if (Math.abs(right-left)<0.001){ return (med);}
      if ((f(k0,a,right)*f(k0,a,med))<0){
        return buscanivel(k0,a,med,right);}
      else{
        return buscanivel(k0,a,left,med);}
  }
  public double f(double k0,double a, double kred){
    double kreal=Math.PI*kred/a;
    if (Math.tan(kreal*a/2)>0){
      return (Math.abs(Math.cos(kreal*a/2))-kreal/k0);}
    else{
      return (Math.abs(Math.sin(kreal*a/2))-kreal/k0);
    }
  }
}

Alojado en Hosting :: LMI