/**copyright by Emanuele Dalla Torre - Technion 2002*/ import java.awt.*; class KPGraph extends Canvas { private final long pointsNumber=(long)1000; KronigPenney kp; Graphics g; int maxX,maxY; KPGraph(KronigPenney kp) {this.kp=kp;} public void paint(Graphics g) { this.g=g; maxX=(int)getBounds().width; maxY=(int)getBounds().height; if (kp.number>0) { paintAxis(); paintGraph(); if(kp.effective>0)paintParabola(kp.band[kp.effective-1]); if(kp.valency>0)paintGap(kp.band[kp.valency-1],kp.band[kp.valency]); g.setColor(Color.magenta); g.drawString("by Emanuele D.T. - Technion V1.4",(int)((0.666)*maxX),maxY-20); } else{g.drawString(kp.errorMsg1,0,20);g.drawString(kp.errorMsg2,0,50);g.drawString(kp.errorMsg3,0,80);} } private void paintAxis() { g.setColor(Color.black); line(-Math.PI,0,Math.PI,0); line(0,0,0,kp.getMaxZ()); //double step=Math.pow(10,Math.floor( Math.log(kp.getMaxZ())/Math.log(10) ))/5; double step=kp.getMaxZ()/15; double z=0; do { g.drawString( "-"+(int)(z*kp.Uo*1000)+"meV",getX(0)-2,getY(z)+5) ;//needed for "0"! z=z+step; } while(z<=kp.getMaxZ()); double k; for(int j=-5;j<6;j++) { k=(Math.PI/(5*(kp.a+kp.b)))*j; g.drawString( (k+" " ).substring(0,5),getX(k),getY(0)+10) ;//needed for "0"! } } private void paintGraph() { g.setColor(Color.blue); double maxZ=kp.getMaxZ(); double step=maxZ/pointsNumber; for(int n=0;nend)) { newZ=oldZ+step; newK=Math.sqrt(2*(newZ-start)/d2); line(oldK,oldZ,newK,newZ); line(-oldK,oldZ,-newK,newZ); oldZ=newZ;oldK=newK; } g.drawString("effective mass= "+((kp.getMe(d2)+" ").substring(0,7))+"*me",0,maxY-20); } void paintGap(KPBand v, KPBand c) { g.setColor(Color.orange); line(0,v.maxZ,0,c.minZ); g.drawString("energy gap= "+((int)1000*(c.minZ-v.maxZ)*kp.Uo)+"meV",(int)(maxX*(0.333)),maxY-20); } private void line(double k1, double z1, double k2, double z2) {g.drawLine(getX(k1),getY(z1),getX(k2),getY(z2));} private int getX(double k) {return (int)(maxX/2+(k*maxX)/(2*Math.PI/(kp.a+kp.b)));} private int getY(double z) {return (int)(maxY-(z*(maxY-40))/kp.getMaxZ()-40);} }