/*
  Questo applet disegna due assi cartesiani e la funzione y = sin(x) 
  nell'intervallo [0, 2*Pi]. L'intervallo viene diviso in 50 parti uguali
  di ampiezza deltaX. Se x1 e' lascissa di uno dei punti di divisione e 
  x2 e' l'ascissa del punto successivo, il disegno si ottiene tracciando
  il segmento che unisce i punti (x1, sin(x1)) e (x2, sin(x2)). (Nell'
  applet il segmento che si traccia viene prima riscalato).
*/

import java.applet.Applet;
import java.awt.geom.*;
import java.awt.*;

public class AppletSeno extends Applet {

    private int numDiv, deltaX;
    private int origineX, origineY;
    private int lunghAsseX;
    private int dilatazioneY;

    public void init() {
	setBackground(Color.black);
	// definisco l'origine degli assi:
	origineX = 50;
	origineY = 150;
	// intervallino di variazione dei punti sull'asse x:
	deltaX = 5;
	// numero totale di divisioni dell'asse x:
	numDiv = 50;
	lunghAsseX = deltaX * numDiv;
	dilatazioneY = 80;  // dilata i valori di y.
    }

    public void paint(Graphics g) {
	Graphics2D g2 = (Graphics2D)g;

	g2.setColor(Color.yellow);
	// titolo del disegno:
	g2.drawString("Grafico della funzione y = sen(x)", 60, 30);
	// disegna la funzione y = sin(x)
	for (int i = 0; i < numDiv; i++) {
	    // calcolo il punto i-imo e (i+1)-imo:
	    double x1 = 2*Math.PI/numDiv*i;
	    double x2 = 2*Math.PI/numDiv*(i+1);
	    // calcolo le corrispondenti ordinate:
	    double y1 = Math.sin(x1);
	    double y2 = Math.sin(x2);

	    Point2D.Double p1 = new Point2D.Double(origineX + deltaX*i, 
						   origineY - dilatazioneY*y1);
	    Point2D.Double p2 = new Point2D.Double(origineX + deltaX*(i+1), 
						   origineY - dilatazioneY*y2);
	    Line2D.Double segmentino = new Line2D.Double(p1, p2);
	    g2.draw(segmentino);
	}

	// disegna gli assi in bianco e di maggiore grossezza:
	g2.setColor(Color.white);
	g2.setStroke(new BasicStroke(2));
	g2.drawLine(origineX - 10, origineY, origineX + lunghAsseX + 10, 
		    origineY);
	g2.drawLine(origineX, origineY + 10, origineX, 10);
    }
}
