import java.awt.*;
import java.applet.*;
import java.lang.Math;
import java.awt.event.*;

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

public class sinus extends Applet
{
	double pi, sinus[] = new double[360];
	int integerSinus[] = new int[360];
	
	public void init(){
		CizimAlani cizimAlani = new CizimAlani(this);
		KontrolPaneli kontrolPaneli = new KontrolPaneli(cizimAlani);
		ScrollPane scroller = new ScrollPane();
		CerceveliPanel panel = new CerceveliPanel();
		
		scroller.add(cizimAlani,0);
		
		panel.setLayout(new BorderLayout());
		panel.add(scroller,"Center");

		setBackground(Color.black);
		setLayout(new FlowLayout(FlowLayout.LEFT,5,5));
		
		add(panel);
		add(kontrolPaneli);
	}
}
class CerceveliPanel extends Panel{
	public CerceveliPanel(){
		setBackground(Color.red);
	}
	public Insets getInsets(){
		return new Insets(0,0,0,0);
	}
	
	public Dimension getPreferredSize(){
		return new Dimension(400,250);
	}
}

class CizimAlani extends Canvas{
	final int MAX_GENLIK = 10;
	double pi, sinus[] = new double[360];
	int integerSinus[] = new int[360];
	int genlik, frekans, genislik = 500;
	
	public CizimAlani(Applet aplet){
		setBackground(Color.blue);
		
		pi = Math.PI;
		integerSinus[0] = 0;
	}
	
	public void cizimAlaniGuncelle(int genlik,int frekans){
		this.genlik = genlik;		
		this.frekans = frekans;
		if(frekans > 10 && frekans <= 20){
			genislik = 2000;
		}
		else if(frekans > 5 && frekans <= 10){
			genislik = 1000;
		}
		else genislik = 500;
		getPreferredSize();
		repaint();
	}
	
	public void paint(Graphics g){
		int eksen=0, referans=0;
		if(genlik>10){
			genlik = MAX_GENLIK;
		}
		for(int i=1;i<360;i++){
			sinus[i] = Math.sin((pi/180)*i)*(-genlik)*10;
			integerSinus[i] = (int)sinus[i];
		}
		for(int f=1;f<=frekans;f++){
			for(int i=0;i<360;++i){
				eksen = (int)i/3;
				g.drawLine(eksen+referans,integerSinus[i]+this.getSize().height/2,eksen+referans,integerSinus[i]+ this.getSize().height/2);
			}
			referans = referans + eksen;
		}
	}
	
	public Dimension getPreferredSize(){
		return new Dimension(genislik,225);
	}
}

class KontrolPaneli extends Panel implements ActionListener{
	int genlikDegeri, frekansDegeri;
	
	TextField genlikAlani = new TextField(2);
	TextField frekansAlani = new TextField(2);
	Label genlikEtiketi = new Label	("Genlik   = ");
	Label frekansEtiketi = new Label("Frekans = ");
	
	private CizimAlani cizimAlani;
	
	Panel duzenle = new Panel();
	Panel genlik = new Panel();
	Panel frekans = new Panel();
	
	public KontrolPaneli(CizimAlani cizimAlani){
		this.cizimAlani = cizimAlani;
		
		setBackground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
		genlikAlani.setText("0");
		frekansAlani.setText("0");
		
		duzenle.setLayout(new BorderLayout(10,10));
		genlik.setLayout(new FlowLayout(FlowLayout.LEFT));
		frekans.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		genlikEtiketi.setFont(new Font("TimesRoman",Font.BOLD,16));
		frekansEtiketi.setFont(new Font("TimesRoman",Font.BOLD,16));
		
		genlik.add(genlikEtiketi);
		genlik.add(genlikAlani);
		frekans.add(frekansEtiketi);
		frekans.add(frekansAlani);
		
		duzenle.add(genlik,"North");
		duzenle.add(frekans,"Center");
		
		add(duzenle);
		
		genlikAlani.addActionListener(this);
		frekansAlani.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent olay){
		int genlik, frekans;
		genlik = Integer.parseInt(genlikAlani.getText());
		frekans = Integer.parseInt(frekansAlani.getText());
		
		genlikDegeri = genlik;
		frekansDegeri = frekans;
		
		cizimAlani.cizimAlaniGuncelle(genlik,frekans);		
	
			repaint();
	}
	
	public Dimension getPreferredSize(){
		return new Dimension(150,250);
	}
	
	public void paint(Graphics g){
		setFont(new Font("TimesRoman",Font.ITALIC,12));
		g.setColor(Color.blue);
		if(genlikDegeri >10 || frekansDegeri > 10){
			g.drawString("Girebileceğiniz en yüksek",5,110);
			g.drawString("genlik ve frekans değeri 10",5,130);
			g.drawString("ile sınırlandırılmıştır",5,150);
			g.drawString("daha yüksek genlik ve frekans",5,170);
			g.drawString("değerleri 10'a eşitlenir !!!",5,190);
		}
		else if(genlikDegeri <= 10 && frekansDegeri <= 10){
			for(int i=0;i<5;i++){
				g.drawString("                     ",5,110 + (i*20));
			}
		}
	}
}