import java.awt.*;

//Author:H.Hakan GENÇ - 2005 - Turkiye
//GSM: +905052610452, E-mail:hasanhakangenc@hotmail.com

public class FonkEgri extends Canvas
{

    public FonkEgri(int xGen, int xOrjin, int yGen, int yOrjin)
    {
        Is = 0.01D;
        VBR = 1.3D;
        VBR2 = 0.69999999999999996D;
        x = (int)(VBR * 10D);
        x2 = (int)(VBR2 * 10D);
        maksAkim = Is / (1.0D - Math.pow((VBR - 0.10000000000000001D) / VBR, 2D));
        maksAkim2 = Is / (1.0D - Math.pow((VBR2 - 0.10000000000000001D) / VBR2, 2D));
        carpan = 100D / maksAkim;
        carpan2 = 100D / maksAkim2;
        integerI = new int[500];
        integerI2 = new int[500];
        integerV = new int[500];
        integerV2 = new int[500];
        artan = 0.0D;
        doubleI = new double[500];
        doubleI2 = new double[500];
        renkZ = Color.decode("#f0f0f0");
        renkO = Color.getHSBColor(0.5F, 0.5F, 1.5F);
        renkE = Color.getHSBColor(2.7F, 0.1F, 0.4F);
        this.xGen = xGen;
        this.xOrjin = xOrjin;
        this.yGen = yGen;
        this.yOrjin = yOrjin;
        kordinat = new Koordinat("Akım(mA)", "Volt(V)", yGen, xGen, xOrjin, yOrjin, renkE);
        sinus = new Sinus(300, 100, renkE);
    }

    public void paint(Graphics g)
    {
        kordinat.paint(g);
        sinus.paint(g);
        g.setColor(renkO);
        setBackground(renkZ);
        for(int i = 0; i < x; i++)
        {
            doubleI[i] = Is / (1.0D - Math.pow(artan / VBR, 2D));
            integerV[i] = i;
            artan += 0.10000000000000001D;
        }

        artan = 0.0D;
        for(int i = 0; i < x2; i++)
        {
            doubleI2[i] = Is / (1.0D - Math.pow(artan / VBR2, 2D));
            integerV2[i] = i;
            artan += 0.10000000000000001D;
        }

        artan = 0.0D;
        for(int i = 0; i < x; i++)
        {
            integerI[i] = (int)(doubleI[i] * 100D);
            if(i == x - 1)
                integerI[i] = (int)(doubleI[i] * carpan);
        }

        for(int i = 0; i < x2; i++)
        {
            integerI2[i] = (int)(doubleI2[i] * 100D);
            if(i == x2 - 1)
                integerI2[i] = (int)(doubleI2[i] * carpan2);
        }

        artan = 0.0D;
        for(int i = 0; i < x - 1; i++)
            g.drawLine(xOrjin - integerV[i], integerI[i] + yOrjin, xOrjin - integerV[i + 1], integerI[i + 1] + yOrjin);

        for(int i = 0; i < x2 - 1; i++)
            g.drawLine(xOrjin + integerV2[i], -integerI2[i] + yOrjin, xOrjin + integerV2[i + 1], -integerI2[i + 1] + yOrjin);

        g.drawString("-" + Double.toString(VBR) + "V", xOrjin - x, yOrjin);
        g.setColor(Color.black);
        g.drawLine(xOrjin - x - 1, yOrjin - 3, xOrjin - x - 1, yOrjin + 3);
        g.drawLine(xOrjin - x, yOrjin - 3, xOrjin - x, yOrjin + 3);
    }

    public void guncelle(double VBR, int genlik)
    {
        this.VBR = VBR;
        sinus.guncelle(genlik, VBR, renkO, renkZ);
        x = (int)(VBR * 10D);
        maksAkim = Is / (1.0D - Math.pow((VBR - 0.10000000000000001D) / VBR, 2D));
        carpan = 100D / maksAkim;
        repaint();
    }

    final int sinir = 100;
    double Is;
    double VBR;
    double VBR2;
    int x;
    int x2;
    double maksAkim;
    double maksAkim2;
    double carpan;
    double carpan2;
    int integerI[];
    int integerI2[];
    int integerV[];
    int integerV2[];
    double artan;
    double doubleI[];
    double doubleI2[];
    int xGen;
    int xOrjin;
    int yOrjin;
    int yGen;
    int genlik;
    Koordinat kordinat;
    Color renkZ;
    Color renkO;
    Color renkE;
    Sinus sinus;
}
