import java.awt.*;
import java.awt.Graphics;

public class Euler {

  double R1,R2,R3,C;

  public Euler() {
  }

  public void windkessel(double R1, double R2, double R3, double C, Graphics g, Dimension d) {

  int Rm, Ra, n, j;
  double a, h, E, w, x, k, I1, I2, I3, maxX, maxY;

  double[] Vv = new double[6001];
  double[] Vc = new double[6001];
  double[] Qv = new double[6001];
  double[] Qc = new double[6001];
  double[] Va = new double[6001];
  double[] Vi = new double[6001];

    h = 0.001;
    n = 6000;
    a = 12;
    E = 1;
    Qv[1] = 86;
    Qc[1] = 86;
    Rm = 100;
    Ra = 100;
    maxX = 0;
    maxY = 0;
    j = 20;

    g.translate(30,250);

    for (int i = 0; i <= (n-1); i++) {

        x = a * java.lang.Math.sin(h*i*6.28*4/3);
        k = java.lang.Math.max(x,0.5);
        Vv[i] = k * Qv[i];
        Vc[i] = Qc[i] / C; 
        I1 = java.lang.Math.max((E-Vv[i])/R1,(E-Vv[i])/Rm);
        I2 = java.lang.Math.max((Vv[i]-Vc[i])/R2,(Vv[i]-Vc[i])/Ra);
        I3 = Vc[i] / R3;
        Qv[i+1] = Qv[i] + (h * (I1-I2));
        Qc[i+1] = Qc[i] + (h * (I2-I3));
        Va[i]= Vc[i] + (R2*I2);
        Vi[i]= E - (R1*I1);

        if (i > 2819)
        {
         if (maxY < Vv[i]*8)
         {
           maxY = Vv[i]*8;
         }

         g.setColor(Color.red);
         g.drawLine((int)((i-2819)*0.15), (int)-(Vv[i-1]*8),(int)((i-2818)*0.15), (int)-(Vv[i]*8));

         if ((int) (Vv[i-1]*8) == j)
         {
          g.setColor(Color.black);
          String s = String.valueOf((int)(Vv[i-1]));
          g.drawString(s,-25,-(j-3));
          j+=20;
         }

         g.setColor(Color.blue);
         g.drawLine((int)((i-2819)*0.15), (int)-(Va[i-1]*8),(int)((i-2818)*0.15), (int)-(Va[i]*8));
         g.setColor(Color.black);

         maxX =((i-2818)*0.15)/0.5;
         if ( maxX - (int)maxX == 0)
         {
         }
        }

    }
    maxY = maxY + maxY/20;
    g.drawLine((int)(0), (int)(0),(int)(d.width - 40), (int)(0));
    g.drawString("Tempo",(int)((d.width - 40)/2),15);
    g.drawLine((int)(0), (int)(0),(int)(0), (int)-(maxY));

    for ( int t = 0; t < ((int)maxY); t+=20) 
    {
     g.drawLine((int)(0), (int)-(t),(int)(5), (int)-(t));
    }

  } //windkessel

}