/* Graf.java */

package applets.kosinus;

import java.awt.*;
//import java.awt.event.*;
import java.util.Vector;

public class Graf /* implements MouseListener, MouseMotionListener */ {
    private Vector<Tangenta> tangente = new Vector<Tangenta>();

    /* (ax,ay) je vektor pomaka ishodista "relativnog" koordinatnog sustava */
    private int ox,oy;

    /* parametri koji "razvuku" koordinatni sustav */
    private static final double a=50.0, b=0.03;

    /* Funkcija koju predstavlja graf */
    public double f(double x) {
	/* U ovoj slucaju cos */
	return Math.cos(x);
    }

    /* Derivacija funkcije */
    public double df(double x) {
	return -Math.sin(x);
    }

    public void translacija(int dx, int dy) {
	ox=ox+dx;
	oy=oy+dy;
    }

    public boolean naGrafu(int x, int y, Rectangle okvir) {
	if (y == okvir.height/2-(int)(a*f((x-okvir.width/2-ox)*b))-oy)
	    return true;
	else return false;
    }

    public void dodajTangentu(int x, int y, Rectangle okvir) {
	double xx;

	xx=(x-okvir.width/2-ox)*b;

	Tangenta nova = new Tangenta(xx,f(xx),df(xx));
	tangente.add(nova);
    }

    public void iscrtajSe(Graphics g, Rectangle okvir) {
	int tx,ty,txKraj,tyKraj;

	/* Iscrtajmo graf u crvenoj boji. */
	g.setColor(Color.red);
	for (int x=0; x<okvir.width; x++)
	    g.drawLine(x,okvir.height/2-(int)(a*f((x-okvir.width/2-ox)*b))-oy,x+1,okvir.height/2-(int)(a*f((x-okvir.width/2-ox+1)*b))-oy);
	
	/* Iscrtajmo tangente. */
	g.setColor(Color.blue);
	for (Tangenta t : tangente) {
	    tx=0;
	    ty=okvir.height/2-(int)(a*(t.y+t.k*(b*(tx-okvir.width/2-ox)-t.x)))-oy;
	    txKraj=okvir.width;
	    tyKraj=okvir.height/2-(int)(a*(t.y+t.k*(b*(txKraj-okvir.width/2-ox)-t.x)))-oy;

	    g.drawLine(tx,ty,txKraj,tyKraj);
	}
    }
}
