import java.awt.*; import java.applet.*; import java.awt.image.*; //author Carlos E. Yaguna //e-mail pegasus@pegasus.udea.edu.co //Departamento de Fisica //Universidad de Antioquia //Medellin-COLOMBIA public class Inter extends Applet { private InterCanva theCanvas; private Panel p1,p3,p4; private Button equi,bor; private Label l1,l2; private AudioClip sound; private Scrollbar s1,s2,s3; public void init() { sound=getAudioClip(getDocumentBase(), "drip.au"); theCanvas=new InterCanva(); theCanvas.resize(350,300); theCanvas.setBackground(Color.black); p1=new Panel(); p3=new Panel(); p4=new Panel(); l1=new Label("Velocity"); l2=new Label("Electric Field"); equi=new Button("Start"); bor=new Button("Stop"); s1=new Scrollbar(Scrollbar.VERTICAL,150,0,0,300); s2=new Scrollbar(Scrollbar.HORIZONTAL,20,0,0,20); s3=new Scrollbar(Scrollbar.HORIZONTAL,5,0,0,18); p1.setLayout(new GridLayout(8,1)); p3.setLayout(new BorderLayout()); p4.setLayout(new GridLayout(1,2)); p1.add(equi); p1.add(bor); p3.add("Center",p1); p4.add(s2); p4.add(s3); //p4.add(l1); //p4.add(l2); setLayout(new BorderLayout()); add("East",p3); add("Center",theCanvas); add("South",p4); add("West",s1); theCanvas.init(); theCanvas.start(); theCanvas.repaint(); } public boolean handleEvent(Event e){ if(e.target instanceof Scrollbar){ if(e.target==s1) theCanvas.lamb=(400.0+s1.getValue())/100.0; if(e.target==s2){ theCanvas.num2=220+s2.getValue()*4; } if(e.target==s3){ theCanvas.dist=2*s3.getValue(); } theCanvas.repaint(); return true; } return super.handleEvent(e); } public boolean action(Event e, Object o) { if(e.target instanceof Button){ sound.play(); if(e.target == equi){theCanvas.bb=1; theCanvas.repaint(); return true;} if(e.target==bor){ theCanvas.bb=0; theCanvas.repaint(); return true;} return false; } return false; } /*public boolean mouseDown(Event e,int x,int y){ if((x>theCanvas.pi)&&(x120-theCanvas.h)) { //theCanvas.ss*=-1; //theCanvas.tt=0.0; theCanvas.repaint(); } return true; } */ } class InterCanva extends Canvas implements Runnable{ public double tiem,lamb; int bb,num,num2,dist; double tt; Font fp,fn; Thread hilo; Image offScreenImage; Color c; public void init() { tiem=0.1; lamb=5.5; bb=0; num=3; num2=300; dist=10; fp=new Font("TimesRoman",Font.ITALIC,9); fn=new Font("TimesRoman",Font.BOLD,12); offScreenImage=createImage(size().width,size().height); } public void start() { if(hilo==null); { hilo=new Thread(this); hilo.start(); } } public void stop() { if(hilo != null){ hilo.suspend(); hilo=null; } } public void run() { while(true){ if(bb==1) repaint(); try{ Thread.sleep(300); } catch(InterruptedException e){ } } } public void update(Graphics g) { //To avoid flicker Graphics offScreenGraphics=offScreenImage.getGraphics(); offScreenGraphics.setColor(getBackground()); offScreenGraphics.fillRect(0,0,size().width,size().height); offScreenGraphics.setColor(g.getColor()); paint(offScreenGraphics); g.drawImage(offScreenImage,0,0,this); } public void plot(Graphics g) { int i,var3,var4,var5,lamb2; double var,var2,yc,xc,ang; g.setColor(Color.white); var3=45; for(i=1;(i<20)&&(var3<150);i++){ var3=40+10*i+5; g.drawLine(40+10*i,120,var3,120); } g.setColor(Color.magenta); g.fillArc(20,110,20,20,-30,60); g.setColor(Color.yellow); g.fillRect(160,80,3,120-80-dist); g.fillRect(160,120-dist+2,3,2*dist-2); g.fillRect(160,120+dist+2,3,40-dist); if(bb==1){ g.setColor(Color.green); lamb2=(int)(20.0*lamb/5.0); //lamb2=20; for(i=1;i<20;i++){ var=lamb2*tiem+lamb2*(i-3); var2=lamb2*tiem+lamb2*(i-6); var4=(int)(100+dist-var/2.0); var5=(int)(100-dist-var/2.0); if(80+var2<160) g.drawArc(40,(int)(110-10-var2/2),(int)(40+var2),(int)(40+var2),-45,90); g.drawArc(160,var4,(int)(40+var),(int)(40+var),-75,150); g.drawArc(160,var5,(int)(40+var),(int)(40+var),-75,150); } } g.setColor(Color.black); g.fillRect(num2,0,150,250); g.setColor(Color.gray); g.fillRect(num2,20,5,200); } public void diagrama(Graphics g) { double inten,pi; int i,j,var1,var2; pi=3.14159265358979323846; for(i=0;i<100;i+=2){ inten=Math.cos(pi*dist*i/(num2*lamb)); inten*=inten; j=(int)(inten*255); //lamb=6.9; if(lamb<4.6){ c=new Color(j-(int)(j/0.6*(lamb-4.0)),0,j); g.setColor(c); } else if(lamb<5.2){ g.setColor(new Color(0,(int)(j/0.6*(lamb-4.6)),j)); } else if(lamb<5.8){ g.setColor(new Color(0,j,j-(int)(j/0.6*(lamb-5.2)))); } else if(lamb<6.4){ g.setColor(new Color((int)(j/0.6*(lamb-5.8)),j,0)); } else if(lamb<=7.0){ g.setColor(new Color(j,j-(int)(j*(lamb-6.4)/0.6),0)); } //g.setColor(new Color(j,0,0)); g.fillRect(num2+5,120+i,40,2); g.fillRect(num2+5,120-i,40,2); } g.setColor(Color.gray); g.fillRect(num2+42,20,5,200); for(i=0;120-i*8>20;i++){ g.drawLine(num2+47,120+i*8,num2+50,120+i*8); g.drawLine(num2+47,120-i*8,num2+50,120-i*8); } } public void paint(Graphics g) { double del; del=0.1; if(bb==1)tiem+=del; if(tiem>=1){ tiem=0.1; g.drawString("no",50,50); } plot(g); if(bb==1)diagrama(g); } }