import java.awt.*;

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

public class Sinus extends Canvas
{

    public Sinus(int referans, int y_referans, Color renkE)
    {
        sinusGerilim = new double[360];
        integerSinusGerilim = new int[360];
        genlik = 0;
        VBR = 3.9000000000000004D;
        this.referans = referans;
        this.y_referans = y_referans;
        this.renkE = renkE;
        ilk_referans = referans;
        pi = 3.1415926535897931D;
    }

    public void paint(Graphics g)
    {
        font = g.getFontMetrics();
        this.f = new Font("", 2, font.getAscent());
        g.setFont(this.f);
        g.setColor(renkE);
        ok = new Ok(referans, 10, 6, 90);
        ok.paint(g);
        ok = new Ok(referans, y_referans + 10, 6, 90);
        ok.paint(g);
        g.drawLine(referans, 10, referans, 2 * y_referans);
        g.drawLine(referans, (2 * y_referans) / 3, referans + 180, (2 * y_referans) / 3);
        g.drawLine(referans, (5 * y_referans) / 3, referans + 180, (5 * y_referans) / 3);
        g.drawString("AC Volt", referans, font.getHeight());
        g.drawString("VR Volt", referans, y_referans + font.getHeight());
        g.setColor(renkO);
        for(int i = 1; i < 360; i++)
            sinusGerilim[i] = -Math.sin((pi / 180D) * (double)i) * 2D;

        for(int f = 1; f <= 2; f++)
        {
            for(int a = 1; a < 360; a++)
            {
                sinus_eksen = a / 4;
                g.drawLine(sinus_eksen + referans, (int)(sinusGerilim[a] * (double)genlik) + (2 * y_referans) / 3, sinus_eksen + referans, (int)(sinusGerilim[a] * (double)genlik) + (2 * y_referans) / 3);
            }

            referans = referans + sinus_eksen;
        }

        referans = ilk_referans;
        sinus_eksen = 0;
        for(int f = 1; f <= 2; f++)
        {
            for(int a = 1; a < 360; a++)
            {
                sinus_eksen = a / 4;
                if((double)(-(int)(sinusGerilim[a] * (double)genlik)) <= VBR && (double)(int)(sinusGerilim[a] * (double)genlik) < 2.4000000000000004D)
                    g.drawLine(sinus_eksen + referans, (int)(sinusGerilim[a - 1] * (double)genlik) + (5 * y_referans) / 3, sinus_eksen + referans, (int)(sinusGerilim[a] * (double)genlik) + (5 * y_referans) / 3);
                else
                if((double)(-(int)(sinusGerilim[a] * (double)genlik)) > VBR)
                    g.drawLine(sinus_eksen + referans, (5 * y_referans) / 3 - (int)VBR, (referans + a / 2) - sinus_eksen, (5 * y_referans) / 3 - (int)VBR - 1);
                else
                if((double)(int)(sinusGerilim[a] * (double)genlik) > 2.4000000000000004D)
                    g.drawLine(sinus_eksen + referans, (5 * y_referans) / 3 + 2, (referans + a / 2) - sinus_eksen, (5 * y_referans) / 3 + 2 + 1);
            }

            referans = referans + sinus_eksen;
        }

        referans = ilk_referans;
        sinus_eksen = 0;
    }

    public void guncelle(int genlik, double VBR, Color renkO, Color renkZ)
    {
        this.genlik = genlik;
        this.VBR = VBR * 2D;
        this.renkO = renkO;
        this.renkZ = renkZ;
        repaint();
    }

    Image winBellek;
    Graphics gBellek;
    final double VZ = 2.4000000000000004D;
    double sinusGerilim[];
    int integerSinusGerilim[];
    int referans;
    int ilk_referans;
    int y_referans;
    int sinus_eksen;
    int genlik;
    double VBR;
    double pi;
    Color renkO;
    Color renkZ;
    Color renkE;
    Ok ok;
    FontMetrics font;
    Font f;
}