import java.awt.*;
import java.awt.geom.*;
import java.applet.*;
import javax.swing.*;


public class DisegnaTriangoli extends Applet {
	private Rectangle2D.Double cornice;	
	private double x1, y1, x2, y2;
	private double xmin,xmax, ymin, ymax;
	private Triangolo triangolo;
	
	public void init() {
		
		//inizializzazione delle coordinate del triangolo		
		double ascissa1,ascissa2,ascissa3, ordinata1,ordinata2,ordinata3;
		JOptionPane.showMessageDialog(null,"Inserire le coordinate dei vertici del triangolo:");
		ascissa1=Double.parseDouble(JOptionPane.showInputDialog(null,"ascissa primo punto"));
		ordinata1=Double.parseDouble(JOptionPane.showInputDialog(null,"ordinata primo punto"));
		ascissa2=Double.parseDouble(JOptionPane.showInputDialog(null,"ascissa secondo punto"));
		ordinata2=Double.parseDouble(JOptionPane.showInputDialog(null,"ordinata secondo punto"));
		ascissa3=Double.parseDouble(JOptionPane.showInputDialog(null,"ascissa terzo punto"));
		ordinata3=Double.parseDouble(JOptionPane.showInputDialog(null,"ordinata terzo punto"));
		triangolo=new Triangolo(ascissa1,ascissa2,ascissa3,ordinata1,ordinata2,ordinata3);
		
		//inizializzazione della finestra di utente
		JOptionPane.showMessageDialog(null,"Inserire le coordinate della finestra utente:");
		x1=Double.parseDouble(JOptionPane.showInputDialog("x1?"));
		x2=Double.parseDouble(JOptionPane.showInputDialog("x2?"));
		y1=Double.parseDouble(JOptionPane.showInputDialog("y1?"));
		y2=Double.parseDouble(JOptionPane.showInputDialog("y2?"));		
		cornice = new Rectangle2D.Double(x1, y1, x2-x1, y2-y1);
		
		//inizializzazione del viewport
		JOptionPane.showMessageDialog(null,"Inserire le percentuali della finestra di dispositivo:");
		xmin=Double.parseDouble(JOptionPane.showInputDialog("%xmin?"));
		xmax=Double.parseDouble(JOptionPane.showInputDialog("%xmax?"));
		ymin=Double.parseDouble(JOptionPane.showInputDialog("%ymin?"));
		ymax=Double.parseDouble(JOptionPane.showInputDialog("%ymax?"));
		
		// stampa delle caratteristiche del triangolo
		if (triangolo.isRetto())
			System.out.print("\nIl triangolo e' retto");
		else if (triangolo.isOttusangolo())
				System.out.print("\nIl triangolo e' ottusangolo");
			 else
			 	System.out.print("\nIl triangolo e' acutangolo");
		System.out.print("\nL'area del triangolo e'\t\t");
		System.out.println(triangolo.area());
		System.out.print("Il perimetro del triangolo e'\t");
		System.out.println(triangolo.perimetro());		
		System.out.print("L'ascissa del baricentro e'\t");
		System.out.println(triangolo.baricentro().getX());
		System.out.print("L'ordinata del baricentro e'\t");
		System.out.println(triangolo.baricentro().getY());		
	}

	public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D)g;
		
		// NB:Le trasformazioni di coordinate inserite nel contesto grafico
		// sono eseguite in ordine inverso rispetto alla sequenza delle chiamate dei 
		// metodi scale e translate
		
		// traslazione dell'origine delle coordinate di pixel
		// nel vertice superiore sinistro del viewport
		double W=getWidth()-1;
		double H=getHeight()-1;
		g2.translate(xmin*W, ymin*H);
		
		// scalamento delle coordinate di utente in coordinate di pixel
		// con ribaltamento dell'asse verticale
		double xscale = W*(xmax-xmin)/(x2 - x1), yscale = H*(ymax-ymin)/(y1 - y2);
		g2.scale(xscale, yscale);
		
		// traslazione del vertice superiore sinistro della finestra d'utente 
		// nell'origine delle coordinate di utente
		g2.translate(-x1, -y2);
		
		// evita deformazioni delle linee
		g2.setStroke(new BasicStroke(0));
		
		// taglia porzioni figure fouri dalla finestra utente
		g2.setClip(cornice);
		
		// disegno del triangolo nel viewport
		triangolo.disegna(g2);
		g2.draw(cornice);
		
		
	}
}