import java.awt.*; import java.applet.*; public class Diagrama extends Applet{ //Author Carlos Esteban Yaguna //Departamento de Fisica //Universidad de Antioquia //Medellin, COLOMBIA //yaguna@pegasus.udea.edu.co //copyright 2000 M Paez, U Antioquia, R landau, OSU private DiagCanvas theCanvas; private Panel p1,p2,p3; private Button b1,b2,b3; private TextField t1,t2,t3; private Label l1,l2,l3; public void init() { theCanvas=new DiagCanvas(); theCanvas.resize(300,300); theCanvas.setBackground(Color.black); p1=new Panel(); p2=new Panel(); p3=new Panel(); t1=new TextField(3); t2=new TextField(3); t3=new TextField(3); l1=new Label("Temp."); l2=new Label("L/Ls"); l3=new Label("Name"); b1=new Button("Compare"); b2=new Button("Add"); p1.setLayout(new BorderLayout()); p2.setLayout(new GridLayout(12,1)); setLayout(new BorderLayout()); p2.add(b1); p2.add(b2); p2.add(l1); p2.add(t1); p2.add(l2); p2.add(t2); p2.add(l3); p2.add(t3); add("Center",p1); p1.add("Center",theCanvas); p1.add("East",p2); theCanvas.bb=1; theCanvas.cont=0; theCanvas.init(); theCanvas.repaint(); } public boolean mouseDown(Event e,int x,int y) { if(theCanvas.bb==1) theCanvas.Mouse(x,y); else{ theCanvas.Mouse2(x,y); theCanvas.cont+=1; if(theCanvas.cont%2==0){theCanvas.bb=1;theCanvas.cont=0;} } return true; } public boolean action(Event e, Object o) { if(e.target instanceof Button){ if(e.target==b1){ theCanvas.bb=0; theCanvas.repaint(); } if(e.target==b2){ theCanvas.Temp[theCanvas.Nmax]=Double.valueOf(t1.getText()).doubleValue(); theCanvas.Lum[theCanvas.Nmax]=Double.valueOf(t2.getText()).doubleValue(); theCanvas.Nom[theCanvas.Nmax]=t3.getText(); theCanvas.Nmax+=1; theCanvas.escala(); theCanvas.guardar(); theCanvas.repaint(); } return true; } return true; } } class DiagCanvas extends Canvas{ private DiagFrame f; private DiagFrame2 f2; private Button showframe; double Lum[],Temp[],Tsun,Templog[],Lumlog[],t,l; String Nom[],n; int Nmax,xp,yp,xpos[],ypos[],bb,cont,a,b,c,e; public void init() { //f=new DiagFrame(); e=0; Tsun=5700; xpos=new int[70]; ypos=new int[70]; Lum=new double[70]; Temp=new double[70]; Lumlog=new double[70]; Templog=new double[70]; Nom=new String[70]; Nmax=52; Lum[0]=1.17;Lum[1]=26.2;Lum[2]=0.0027;Lum[3]=184.0;Lum[4]=84.0; Lum[5]=35000;Lum[6]=3900;Lum[7]=24.0;Lum[8]=1000;Lum[9]=1300;Lum[10]=36000; Lum[11]=0.00049;Lum[12]=0.073;Lum[13]=0.0026;Lum[14]=0.00017; Lum[16]=0.36;Lum[17]=0.25;Lum[18]=0.28;Lum[19]=0.012; Lum[20]=0.00069;Lum[21]=0.0033;Lum[22]=0.0004;Lum[23]=5.8; Lum[24]=0.00040;Lum[25]=0.33;Lum[26]=6.9e-5;Lum[27]=0.00033; Lum[28]=0.11;Lum[29]=7.6e-3;Lum[30]=83;Lum[31]=1.1e-3; Lum[32]=2.8e3;Lum[33]=1.7e3;Lum[34]=3e3;Lum[35]=4.4; Lum[36]=9.1;Lum[37]=100;Lum[38]=1.2e3;Lum[39]=11; Lum[40]=1.7e-4;Lum[41]=4.4e-3;Lum[42]=1.3e-3;Lum[43]=3.3e-1; Lum[44]=6.9e-5;Lum[45]=8.3e-2;Lum[46]=9.1e-5;Lum[47]=3.3e-4; Lum[48]=4.8e3;Lum[49]=1.7e2;Lum[50]=3.6e-3;Lum[51]=3.3e-2; Temp[0]=5700;Temp[1]=9800;Temp[2]=8500;Temp[3]=5300;Temp[4]=3650;Temp[5]=12300; Temp[6]=2300;Temp[7]=4200;Temp[8]=20000;Temp[9]=2100;Temp[10]=11000;Temp[11]=2900; Temp[12]=3900;Temp[13]=3300;Temp[14]=8200; Temp[16]=5000;Temp[17]=4500;Temp[18]=4700; Temp[19]=1700;Temp[20]=2600;Temp[21]=3300; Temp[22]=2650;Temp[23]=6500;Temp[24]=7000; Temp[25]=4000;Temp[26]=2600;Temp[27]=2650; Temp[28]=4000;Temp[29]=2500;Temp[30]=3500; Temp[31]=3100;Temp[32]=19500;Temp[33]=16500; Temp[34]=20000;Temp[35]=9700;Temp[36]=7700; Temp[37]=10000;Temp[38]=6400;Temp[39]=8900; Temp[40]=2400;Temp[41]=3100;Temp[42]=2400; Temp[43]=4000;Temp[44]=2600;Temp[45]=4200; Temp[46]=2500;Temp[47]=3700;Temp[48]=20000; Temp[49]=13500;Temp[50]=2900;Temp[51]=3300; Nom[0]="a Centauri A";Nom[1]="Sirio A";Nom[2]="Sirio B";Nom[3]="Capella A"; Nom[4]="Arcturus";Nom[5]="Rigel A";Nom[6]="Betelgeuse";Nom[7]="Pollux"; Nom[8]="Spica";Nom[9]="Antares";Nom[10]="Deneb";Nom[11]="Barnard"; Nom[12]="61 Cygni A";Nom[13]="Krueger 60A";Nom[14]="Van Maanen"; Nom[16]="t Ceti";Nom[17]="e Eridani";Nom[18]="40 Eridani A"; Nom[19]="40 Eridani B";Nom[20]="40 Eridani C";Nom[21]="Kapteyn"; Nom[22]="Ross 614";Nom[23]="Procyon A";Nom[24]="Procyon B"; Nom[25]="a Centauri B";Nom[26]="a Centauri C";Nom[27]="Ross 154"; Nom[28]="e Indi";Nom[29]="Luyten 789-6";Nom[30]="Aldebaran A"; Nom[31]="Aldebaran B";Nom[32]="a Crucis A";Nom[33]="a Crucis B"; Nom[34]="b Centauri";Nom[35]="Vega";Nom[36]="Altair"; Nom[37]="Rigel B";Nom[38]="Canopus";Nom[39]="Fomalhaut A"; Nom[40]="Luyten 1159-16";Nom[41]="Lalande 21185";Nom[42]="Wolf 359"; Nom[43]="Capella B";Nom[44]="Capella C";Nom[45]="Fomalhaut B"; Nom[46]="Ross 248";Nom[47]="61 Cygni B";Nom[48]="b Crucis"; Nom[49]="Achernar";Nom[50]="BD+68946";Nom[51]="BD+501725"; Lum[15]=1.0;Temp[15]=Tsun;Nom[15]="Sol"; escala(); guardar(); } public void guardar() { int i; for(i=0;i=0){ String s="Caracteristicas de la estrella"; if(f!=null){ f.hide(); f.dispose(); } f=new DiagFrame(s); f.temp=Temp[i]; f.lum=Lum[i]; f.name=Nom[i]; f.resize(550,330); f.setBackground(Color.cyan); f.setResizable(false); f.show(); } } public void Mouse2(int x,int y) { double r; int m,i; i=-1; for(m=0;m=0)&&(cont==0)){ t=Temp[i]; l=Lum[i]; n=Nom[i]; } if((i>=0)&&(cont==1)){ String s="Caracteristicas de la estrella"; if(f2!=null){ f2.hide(); f2.dispose(); } f2=new DiagFrame2(s); f2.temp1=Temp[i]; f2.lum1=Lum[i]; f2.name1=Nom[i]; f2.temp2=t; f2.lum2=l; f2.name2=n; f2.resize(550,330); f2.setBackground(Color.cyan); f2.setResizable(false); f2.show(); } } public void ejes(Graphics g) { int x1,y1,x2,y2; coordenadas(-0.8,-6.0); x1=xp; y1=yp; coordenadas(0.8,-6.0); g.setColor(Color.green); g.drawLine(x1,y1,xp,yp); coordenadas(-0.6,-8.0); x1=xp; y1=yp; coordenadas(-0.6,7.0); g.drawLine(x1,y1,xp,yp); coordenadas(0.5,-6.0); g.drawLine(xp,yp-3,xp,yp+3); g.setFont(new Font("TimesRoman",Font.PLAIN,12)); g.drawString("0.5",xp-5,yp+15); coordenadas(0.0,-6.0); g.drawLine(xp,yp-3,xp,yp+3); g.drawString("0.0",xp-5,yp+15); coordenadas(0.2,-6.0); g.drawLine(xp,yp-3,xp,yp+3); g.drawString("0.2",xp-5,yp+15); coordenadas(-0.2,-6.0); g.drawLine(xp,yp-3,xp,yp+3); g.drawString("- 0.2",xp-7,yp+15); coordenadas(-0.5,-6.0); g.drawLine(xp,yp-3,xp,yp+3); g.drawString("- 0.5",xp-7,yp+15); coordenadas(-0.6,0.0); g.drawLine(xp-3,yp,xp+3,yp); g.drawString("0.0",xp-20,yp+6); coordenadas(-0.6,4.0); g.drawLine(xp-3,yp,xp+3,yp); g.drawString("4.0",xp-20,yp+6); coordenadas(-0.6,1.0); g.drawLine(xp-3,yp,xp+3,yp); g.drawString("1.0",xp-20,yp+6); coordenadas(-0.6,6.0); g.drawLine(xp-3,yp,xp+3,yp); g.drawString("6.0",xp-20,yp+6); coordenadas(-0.6,-1.0); g.drawLine(xp-3,yp,xp+3,yp); g.drawString("- 1.0",xp-25,yp+6); coordenadas(-0.6,-3.0); g.drawLine(xp-3,yp,xp+3,yp); g.drawString("- 3.0",xp-25,yp+6); coordenadas(-0.6,7.0); g.setColor(Color.white); g.drawString("Log(L/Ls)",xp-50,yp+5); coordenadas(0.8,-6.0); g.drawString("Log(T/Ts)",xp-25,yp+15); } public void diagPlot(Graphics g) { int i,j; double xx,yy; g.setColor(Color.yellow); for(j=0;jrx) g.fillRect(rx+200,50+10,i,yp-10); g.setColor(Color.green); if(rx3>(rx+i)) g.fillRect(rx+i+200,10+50,i,yp-10); g.setColor(Color.yellow); if(rx3>(rx+2*i)) g.fillRect(rx+2*i+200,10+50,i,yp-10); g.setColor(Color.orange); if(rx3>(rx+3*i)) g.fillRect(rx+3*i+200,10+50,i,yp-10); g.setColor(Color.red); if(rx3>(rx+4*i)) g.fillRect(rx+4*i+200,10+50,i,yp-10); } public void ejes2(Graphics g) { double dy,yy; dy=10e12; g.setColor(Color.black); for(yy=0;yy<0.9*ymmax;yy+=dy){ coordenadas(0.0,yy); g.drawLine(xp-3+200,yp+50,xp+3+200,yp+50); } } public void PlanckPlot(Graphics g) { int i,j,nx,ny,c=0; double xx,yy; nx=5; ny=5; lmax=2.9e-3/temp; ymmax=Planck(lmax)*1.1; xmmax=3*lmax; ejes(g); ejes2(g); g.setColor(Color.black); for(i=100;i100){ g.drawLine(nx+200,ny+50,xp+200,yp+50); } nx=xp; ny=yp; } //g.fillOval(100,100,5,5); } public void datplot(Graphics g) { double r; r=radio(temp,lum); g.setFont(new Font("TimesRoman",Font.BOLD,36)); g.drawString(name,40,60); g.setFont(new Font("TimesRoman",Font.PLAIN,16)); g.drawString("Temperatura: "+Double.toString(temp)+" C", 50,85); g.drawString("Luminosidad: "+Double.toString(lum)+" Ls", 50,105); g.drawString("Radio: "+Double.toString(r)+" Rs", 50,125); g.drawString("Lambda max: "+Double.toString(lmax),50,145); } public void paint(Graphics g) { //g.fillOval(100,100,10,10); PlanckPlot(g); datplot(g); } public boolean handleEvent(Event e) { if(e.id==Event.WINDOW_DESTROY){ hide(); dispose(); return true; } return super.handleEvent(e); } public boolean action(Event e, Object o) { if(e.target==a) setBackground(Color.yellow); else if(e.target==b) setBackground(Color.red); else if(e.target==c) setBackground(Color.blue); else if(e.target==d) setBackground(Color.green); repaint(); return true; } } class DiagFrame2 extends Frame{ private Button a,b,c,d; double temp1,temp2,lum1,lum2,ymmax,ym1,ym2,xmmax,lm1,lm2,lmax; int xp,yp; String name1,name2; public DiagFrame2(String s) { super(s); a=new Button("yellow"); b=new Button("red"); c=new Button("blue"); d=new Button("green"); //add("North",a); //add("East",b); //add("South",c); //add("West",d); } void coordenadas(double x,double y) { int width,height,xpcero,ypcero; width=300;//ancho del Canvas height=300;//altura //xmmax=10e-7;//coordenada de mundo maxima para x xpcero=150;//coordenada de pantalla para el punto medio //ymmax=8e13; ypcero=150; xp=(int)(xpcero+(width-xpcero)/xmmax*x); yp=(int)(ypcero+((-height+ypcero)/ymmax*y)); } double Planck(double l) { double k,c,h; h=6.626e-34; c=3e8; k=1.381e-23; return 2*h*c*c/Math.pow(l,5.0)/(Math.exp(h*c/(l*k*temp1))-1.0); } double Planck2(double l) { double k,c,h; h=6.626e-34; c=3e8; k=1.381e-23; return 2*h*c*c/Math.pow(l,5.0)/(Math.exp(h*c/(l*k*temp2))-1.0); } double radio(double t,double l) { return Math.pow((5700.0/t),2.0)*Math.sqrt(l); } public void ejes(Graphics g) { int rx,ry,rx2,rx3,i,rval,gval,bval; double num,var; coordenadas(0,0); rx=xp; ry=yp; g.setColor(Color.darkGray); coordenadas(0.0,ymmax); g.drawLine(xp+200,10+50,rx+200,ry+50); coordenadas(xmmax,0.0); rx3=xp; g.drawLine(xp+200,yp+50,rx+200,ry+50); num=xmmax*1e9; coordenadas(4e-7,0.0); rx=xp; ry=yp; coordenadas(7e-7,0.0); rx2=xp; g.setFont(new Font("TimesRoman",Font.ITALIC,20)); g.drawString("Curva de Planck",350,230); i=(int)(0.2*(rx2-rx)); g.setColor(Color.blue); if(rx3>rx) g.fillRect(rx+200,50+10,i,yp-10); g.setColor(Color.green); if(rx3>(rx+i)) g.fillRect(rx+i+200,10+50,i,yp-10); g.setColor(Color.yellow); if(rx3>(rx+2*i)) g.fillRect(rx+2*i+200,10+50,i,yp-10); g.setColor(Color.orange); if(rx3>(rx+3*i)) g.fillRect(rx+3*i+200,10+50,i,yp-10); g.setColor(Color.red); if(rx3>(rx+4*i)) g.fillRect(rx+4*i+200,10+50,i,yp-10); } public void ejes2(Graphics g) { double dy,yy; dy=10e12; g.setColor(Color.black); for(yy=0;yy<0.9*ymmax;yy+=dy){ coordenadas(0.0,yy); g.drawLine(xp-3+200,yp+50,xp+3+200,yp+50); } } public void PlanckPlot(Graphics g) { int i,j,nx,ny,c=0; double xx,yy,ya; nx=5; ny=5; lm1=2.9e-3/temp1; lm2=2.9e-3/temp2; if(lm1>lm2)lmax=lm1; else lmax=lm2; ym1=Planck(lm1)*1.1; ym2=Planck2(lm2)*1.1; if(ym1>=ym2)ymmax=ym1; else ymmax=ym2; xmmax=3*lmax; ejes(g); ejes2(g); g.setColor(Color.black); for(i=100;i100){ g.drawLine(nx+200,ny+50,xp+200,yp+50); } nx=xp; ny=yp; } //g.fillOval(100,100,5,5); } public void PlanckPlot2(Graphics g) { int i,j,nx,ny,c=0; double xx,yy; nx=5; ny=5; g.setColor(Color.black); for(i=100;i100){ g.drawLine(nx+200,ny+50,xp+200,yp+50); } nx=xp; ny=yp; } //g.fillOval(100,100,5,5); } public void datplot(Graphics g) { double r; r=radio(temp1,lum1); g.setFont(new Font("TimesRoman",Font.BOLD,36)); g.drawString(name1,40,60); g.setFont(new Font("TimesRoman",Font.PLAIN,16)); g.drawString("Temperatura: "+Double.toString(temp1)+" C", 50,85); g.drawString("Luminosidad: "+Double.toString(lum1)+" Ls", 50,105); g.drawString("Radio: "+Double.toString(r)+" Rs", 50,125); g.drawString("Lambda max: "+Double.toString(lm1),50,145); } public void datplot2(Graphics g) { double r; int esp; esp=120; r=radio(temp2,lum2); g.setFont(new Font("TimesRoman",Font.BOLD,36)); g.drawString(name2,40,60+esp); g.setFont(new Font("TimesRoman",Font.PLAIN,16)); g.drawString("Temperatura: "+Double.toString(temp2)+" C", 50,85+esp); g.drawString("Luminosidad: "+Double.toString(lum2)+" Ls", 50,105+esp); g.drawString("Radio: "+Double.toString(r)+" Rs", 50,125+esp); g.drawString("Lambda max: "+Double.toString(lm2),50,145+esp); } public void paint(Graphics g) { //g.fillOval(100,100,10,10); PlanckPlot(g); PlanckPlot2(g); datplot(g); datplot2(g); } public boolean handleEvent(Event e) { if(e.id==Event.WINDOW_DESTROY){ hide(); dispose(); return true; } return super.handleEvent(e); } public boolean action(Event e, Object o) { if(e.target==a) setBackground(Color.yellow); else if(e.target==b) setBackground(Color.red); else if(e.target==c) setBackground(Color.blue); else if(e.target==d) setBackground(Color.green); repaint(); return true; } }