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