import java.awt.*; import java.applet.*; import java.lang.*; public class log2 extends Applet{ int left=25; int top=25; int difference=0; int[] slTop=new int[3]; int[] slLeft=new int[3]; int[] slPos=new int[3]; int[] slFlag=new int[3]; int slLen=6; double harvest; double[][] solutions=new double[301][401]; int[] displayFlags=new int[301]; Button clearButton=new Button("Clear"); Image offI; Graphics f; Dimension d,offD; int[] phasePortrait=new int[121]; int dfXNum=16; int dfYNum=11; int[][][] df=new int[dfXNum][dfYNum][4]; public void init(){ int j,m; double r=2.0; double k=1.0; double p=0.0; double rka=0; double rkb=0; double rkc=0; double rkd=0; double h=2.0/400.0; double slope,deltaT; harvest=0.0; add(clearButton); for(j=0;j<=2;j++){ slTop[j]=top+10; slLeft[j]=left+420+35*j; slPos[j]=0; slFlag[j]=0; } for(j=0;j<=300;j++){ displayFlags[j]=0;} for(j=0;j<=300;j++){ solutions[j][0]=2.0-(double)j/100.0; for(m=1;m<=400;m++){ p=solutions[j][m-1]; rka=h*r*(1-p/k)*p; p=p+.5*rka; rkb=h*r*(1-p/k)*p; p=p-.5*rka+.5*rkb; rkc=h*r*(1-p/k)*p; p=p-.5*rkb+rkc; rkd=h*r*(1-p/k)*p; solutions[j][m]=solutions[j][m-1]+(1.0/6.0)*(rka+2*rkb+2*rkc+rkd); } } for(j=0;j<=120;j++){ p=-1.0+(double)j/40.0; phasePortrait[j]=(int)(70.0-(35.0)*(r*(1-p/k)*p-harvest)); } for(j=0;j=.075){deltaT=.075;} df[j][m][2]=(int)Math.floor(deltaT*200.0)+df[j][m][0]; df[j][m][3]=-1*(int)Math.floor(slope*deltaT*100.0)+df[j][m][1]; } } } public boolean mouseDown(Event e,int x,int y){ int j; for(j=0;j<=2;j++){ slFlag[j]=0; if(x<=slLeft[j]+10){ if(x>=slLeft[j]){ if(y>=slPos[j]+slTop[j]){ if(y<=slPos[j]+slTop[j]+slLen){ slFlag[j]=1; difference=y-slPos[j]-slTop[j];}}}}} return(true); } public boolean mouseDrag(Event e,int x,int y){ int j,m; double slope,deltaT; Graphics newg=getGraphics(); double p=0.0; double r=2.0+(double)slPos[0]/50.0; double k=1.0+(double)slPos[1]/100.0; harvest=(double)slPos[2]/100.0; for(j=0;j<=2;j++){ if(slFlag[j]==1){ slPos[j]=y-slTop[j]-difference; if(slPos[j]<=0){slPos[j]=0;} if(slPos[j]>=100){slPos[j]=100;} } } if(slFlag[0]==1||slFlag[1]==1||slFlag[2]==1){ for(j=0;j<=300;j++){displayFlags[j]=0;} for(j=0;j<=120;j++){ p=-1.0+(double)j/40.0; phasePortrait[j]=(int)(70.0-(35.0)*(r*(1-p/k)*p-harvest)); } for(j=0;j=.075){deltaT=.075;} df[j][m][2]=(int)Math.floor(deltaT*200.0)+df[j][m][0]; df[j][m][3]=-1*(int)Math.floor(slope*deltaT*100.0)+df[j][m][1]; } } } update(newg); return(true); } public boolean mouseUp(Event e,int x,int y){ Graphics newg=getGraphics(); int j,m; double r=2.0+(double)slPos[0]/50.0; double k=1.0+(double)slPos[1]/100.0; harvest=(double)slPos[2]/100.0; double p=0.0; double rka=0; double rkb=0; double rkc=0; double rkd=0; double h=2.0/400.0; double slope,deltaT; if(y>=top){ if(y<=top+300){ if(x>=left){ if(x<=left+400){ displayFlags[y-top]=1; } } } } if(slFlag[0]==1||slFlag[1]==1||slFlag[2]==1){ for(j=0;j<=120;j++){ p=-1.0+(double)j/40.0; phasePortrait[j]=(int)(70.0-(35.0)*(r*(1-p/k)*p-harvest)); } for(j=0;j=.075){deltaT=.075;} df[j][m][2]=(int)Math.floor(deltaT*200.0)+df[j][m][0]; df[j][m][3]=-1*(int)Math.floor(slope*deltaT*100.0)+df[j][m][1]; } } for(j=0;j<=300;j++){ solutions[j][0]=2.0-(double)j/100.0; for(m=1;m<=400;m++){ p=solutions[j][m-1]; rka=h*(r*(1-p/k)*p-harvest); p=p+.5*rka; rkb=h*(r*(1-p/k)*p-harvest); p=p-.5*rka+.5*rkb; rkc=h*(r*(1-p/k)*p-harvest); p=p-.5*rkb+rkc; rkd=h*(r*(1-p/k)*p-harvest); solutions[j][m]=solutions[j][m-1]+(1.0/6.0)*(rka+2*rkb+2*rkc+rkd); } } } update(newg); return(true); } public boolean action(Event e,Object arg){ Object target=e.target; int j; Graphics newg=getGraphics(); if(target==clearButton){ for(j=0;j<=300;j++){ displayFlags[j]=0;} update(newg); } return(true); } public void paint(Graphics g){ d=size(); clearButton.reshape(left+420,slTop[2]+275,60,25); update(g); } public void update(Graphics g){ int j; int m; int drawFlag=1; int drawK; if((f==null) // Setup an off-screen image ||(d.width !=offD.width) // via the update() method. ||(d.height != offD.height)) // { offD=d; offI=createImage(d.width, d.height); f=offI.getGraphics(); } setBackground(Color.gray); f.setColor(getBackground()); f.fillRect(0,0,d.width,d.height); f.setColor(Color.black); f.fillRect(left,top,400,301); //DIRECTION FIELD------------------------- f.setColor(Color.lightGray); for(j=0;j130){ f.drawLine(left+420+j,slTop[2]+130+phasePortrait[j],left+420+j+1,slTop[2]+260);}} if(phasePortrait[j]>130){if(phasePortrait[j+1]<=130){ f.drawLine(left+420+j,slTop[2]+260,left+420+j+1,slTop[2]+130+phasePortrait[j+1]);}} } //SLIDERS----------------------------------- for(j=0;j<=2;j++){ f.setColor(Color.black); f.drawLine(slLeft[j]+4,slTop[j],slLeft[j]+4,slTop[j]+100+slLen); f.drawLine(slLeft[j]+5,slTop[j],slLeft[j]+5,slTop[j]+100+slLen); f.drawLine(slLeft[j]+6,slTop[j],slLeft[j]+6,slTop[j]+100+slLen); f.setColor(Color.gray); f.drawLine(slLeft[j]+4,slPos[j]+slTop[j],slLeft[j]+4,slPos[j]+slTop[j]+slLen); f.drawLine(slLeft[j]+5,slPos[j]+slTop[j],slLeft[j]+5,slPos[j]+slLen+slTop[j]); f.drawLine(slLeft[j]+6,slPos[j]+slTop[j],slLeft[j]+6,slPos[j]+slLen+slTop[j]); f.setColor(Color.white); f.drawLine(slLeft[j],slTop[j]+slPos[j],slLeft[j]+9,slTop[j]+slPos[j]); f.drawLine(slLeft[j],slTop[j]+slPos[j],slLeft[j],slTop[j]+slLen+slPos[j]); f.setColor(Color.darkGray); f.drawLine(slLeft[j]+1,slTop[j]+slPos[j]+slLen-1,slLeft[j]+9,slTop[j]+slPos[j]+slLen-1); f.drawLine(slLeft[j]+9,slTop[j]+slPos[j]+1,slLeft[j]+9,slTop[j]+slPos[j]+slLen-1); f.setColor(Color.black); f.drawLine(slLeft[j],slTop[j]+slPos[j]+slLen,slLeft[j]+10,slTop[j]+slPos[j]+slLen); f.drawLine(slLeft[j]+10,slTop[j]+slPos[j],slLeft[j]+10,slTop[j]+slPos[j]+slLen); } //LABELS--------------------------------- f.setColor(Color.white); for(j=0;j<=7;j++){ f.drawLine(left+50+50*j,top+197,left+50+50*j,top+203); f.drawString(Double.toString((double)j*.25+.25),left+40+50*j,top+217); } f.drawString("0",left-11,top+205); f.drawString("r",slLeft[0]+2,slTop[0]-3); f.drawString("K",slLeft[1]+2,slTop[1]-3); f.drawString("H",slLeft[2]+2,slTop[2]-3); f.setColor(Color.green); f.drawString(Double.toString(Math.floor(100.0*(2.0+(double)slPos[0]/50.0))/1000.0),slLeft[0]-5,slTop[0]+112+slLen); f.drawString(Double.toString(Math.floor(100.0*(1.0+(double)slPos[1]/100.0))/100.0),slLeft[1]-5,slTop[1]+112+slLen); f.drawString(Double.toString(Math.floor(100.0*((double)slPos[2]/100.0))/100.0),slLeft[2]-5,slTop[2]+112+slLen); g.drawImage(offI,0,0,this); } }