// saltmrsh.java // Program for a salt marsh illustrating external rhythms // adapted from a program in basic by H.T. Odum & E. Odum, 1994 import java.applet.Applet; import java.awt.*; public class saltmrsh extends Applet { float i0,m,n,e0,j0,q1,q2,q3,j,e,p1,p2,p3,k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,i,r,d1, d2,d3,t,ti,qi1,qi2,qi3,ii,ji,ei; int x,y,z; Label pr1,pr2,pr3,pr4; TextField in1,in2,in3,in4; Button drawbutton; public void init() { pr1 = new Label("Q3 Initial storage of organic matter: "); in1 = new TextField("500",6); add(pr1);add(in1); pr2 = new Label("Multiply tidal range by (1 or 2): "); in2 = new TextField("1",3); add(pr2);add(in2); pr3 = new Label("Multiply inflow of sunlight by (1 or 2): "); in3 = new TextField("1",3); add(pr3);add(in3); pr4 = new Label("Multiply inflow of nutrients by (1 or 2): "); in4 = new TextField("1",3); add(pr4);add(in4); drawbutton = new Button("Draw"); add(drawbutton); } public boolean action (Event e, Object o) { q3 = (float)Integer.parseInt(in1.getText()); x = Integer.parseInt(in2.getText()); y = Integer.parseInt(in3.getText()); z = Integer.parseInt(in4.getText()); repaint(); return true; } public void paint (Graphics g) { g.drawRect(55,120,320,180); g.drawLine(55,150,380,150); g.drawLine(55,170,380,170); g.drawLine(55,190,380,190); g.drawLine(55,210,380,210); g.drawString("Sun", 5, 145); g.drawString("Tide", 5, 165); g.drawString("River", 5, 185); g.drawString("Nutrients", 5, 205); g.drawString("Peat", 5, 250); g.drawString("Grass", 5, 295); i0=200;m=7;n=6.5f;e0=0.2f;j0=0.002f;q1=0.2f;q2=10; j=0.02f;e=1;p1=0.05f;p2=30;p3=30;k0=20;k1=0.02f;k2=0.0004f; k3=4e-07f;k4=0.05f;k5=2e-05f;k6=4e-05f;k7=0.0036f;k8=6.000001e-04f; k9=3.2e-09f;t=0;ti=0; while ((t/n)<320) { i=(float)(2000+(1+Math.sin(t/58))*2000)*(float)y; j=(float)(0.02f*(1+Math.cos(t/58)))*(float)z; e=(float)(2+Math.sin(t/27))*(float)x; r=i/(1+k0*q1); d1=j-k5*q1*r+k3*q2+k9*q3-k4*q1*e; d2=k1*q1*r-k7*q2-k2*q2; d3=k7*q2-k8*q3-k6*q3*e; q1=q1+m*d1; qi1=q1; if (q1<0.01){ q1=0.01f; } q2=q2+m*d2; qi2=q2; q3=q3+m*d3; qi3=q3; g.setColor(Color.blue); g.drawLine((int)(55+ti/n),(int)(210-qi1/p1),(int)(55+t/n),(int)(210-q1/p1)); g.setColor(Color.red); g.drawLine((int)(55+ti/n),(int)(190-ji/j0),(int)(55+t/n),(int)(190-j/j0)); g.setColor(Color.green); g.drawLine((int)(55+ti/n),(int)(300-qi2/p2),(int)(55+t/n),(int)(300-q2/p2)); g.setColor(Color.pink); g.drawLine((int)(55+ti/n),(int)(150-ii/i0),(int)(55+t/n),(int)(150-i/i0)); g.setColor(Color.orange); g.drawLine((int)(55+ti/n),(int)(300-qi3/p3),(int)(55+t/n),(int)(300-q3/p3)); g.setColor(Color.black); g.drawLine((int)(55+ti/n),(int)(170-ei/e0),(int)(55+t/n),(int)(170-e/e0)); ti=t;qi1=q1;ji=j;qi2=q2;ii=i;qi3=q3;ei=e; t+=m; } } } // Stefan Kontur & E. Ortega, August 29th 2000