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


public class Trasfo1 extends Applet {
	private Rectangle2D.Double tronco;
	private Ellipse2D.Double chioma;
	private Rectangle2D.Double cornice;	
	private double x1, y1, x2, y2;
	private double xmin,xmax, ymin, ymax;
	
	public void init() {
		tronco = new Rectangle2D.Double(10, 5, 5, 55);
		chioma = new Ellipse2D.Double(0, 60, 25, 25);
		x1 = 5; y1 = 0;
		x2 = 30; y2 = 70;
		cornice = new Rectangle2D.Double(x1, y1, x2-x1, y2-y1);
		xmin=Double.parseDouble(JOptionPane.showInputDialog("xmin?"));
		xmax=Double.parseDouble(JOptionPane.showInputDialog("xmax?"));
		ymin=Double.parseDouble(JOptionPane.showInputDialog("ymin?"));
		ymax=Double.parseDouble(JOptionPane.showInputDialog("ymax?"));		
	}

	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);
		
		g2.setStroke(new BasicStroke(0));
		
		// taglia porzioni alberello fouri dalla finestra utente
		// g2.setClip(cornice);
		
		// disegno dell'alberello
		g2.setColor(Color.yellow);
		g2.draw(tronco);
		g2.setColor(Color.green);
		g2.draw(chioma);
		g2.setColor(Color.red);
		g2.draw(cornice);
	}
}