/**
 * Un oggetto della classe <code>Punto</code> rappresenta un punto (x,y) nel piano cartesiano, 
 * dove x (ascissa) e y (ordinata) sono numeri interi.
 *<BR>
 * Siano P1=(x1,y1) e P2=(x2,y2) due punti. Diciamo che:
 *  
 *
 *   <ul>
 *  <li> P1  &egrave;  a <em>sinistra di</em> P2 se x1<=x2;
 *  <li> P1 &egrave;  <em>sopra</em>   P2 se y1>=y2;
 *  <li> <em>minXminY(P1,P2) </em>  &egrave; il punto avente coordinate   (min(x1,x2), min(y1,y2)).
 *  <li> <em>minXmaxY(P1,P2) </em>  &egrave; il punto avente coordinate   (min(x1,x2), max(y1,y2)).
 *  <li> <em>maxXminY(P1,P2) </em>  &egrave; il punto avente coordinate   (max(x1,x2), min(y1,y2)).
 *  <li> <em>maxXmaxY(P1,P2) </em>  &egrave; il punto avente coordinate   (max(x1,x2), max(y1,y2)).
 * </ul>
 *
 * Le ultime quattro definizioni sono utili per trovare le intersezioni di rette parallele agli assi passanti per 
 * due punti assegnati. Ad esempio, in 
 *
 * <pre>
 *     P1
 *     |               
 *     |               
 *     Q-------------P2
 *</pre>
 * il punto Q (intersezione delle rette passanti per   P1  e P2)
 *  &egrave;  il punto  <em>minXminY(P1,P2) </em>. 
 *
 *
 */

public class  Punto  {

  // CAMPI
 
  private int x; // ascissa del punto
  private int y; // ordinata del punto


 // COSTRUTTORI

/**
   * Costruisce il punto (x,y)
   */
    
    public Punto(int x, int y){
	// ....
    }

 /**
   * Costruisce il punto (0,0)
   */
    public Punto(){
	// chiamare costruttore precedente
    }



 // METODI



/**
   * Restituisce la stringa  che rappresenta il punto che esegue il metodo.
   * @return la stringa che rappresenta il punto che esegue il metodo.
   */


// riscrive toString della classe Object (overriding)




 
    public String toString() {
// deve restituire una stringa della forma "(x,y)"
         return "";
  }




 /**
   * Restituisce l'ascissa del punto.
   * @return   ascissa del punto che esegue  il metodo.
   */

public int getX() {
    return -1;
  }


/**
   * Restituisce l'ordinata del punto.
   * @return   ordinata del punto che esegue  il metodo.
   */

public int getY() {
    return -1;
  }

 


/**
   *  Controlla  se il  punto che esegue il metodo
   *  &egrave; a sinistra del   punto   <code>p</code>.
   *  @param p il punto da confrontare con quello che esegue il metodo.
   *  @return <code>true</code> se il punto che esegue il metodo
   *    &egrave; a sinistra di  quello passato come argomento,     
   *         <code>false</code> altrimenti.
   */

    public boolean isLeft(Punto p){
	return false;
    }



/**
   *  Controlla  se il  punto che esegue il metodo
   *  &egrave; sopra  il  punto   <code>p</code>.
   *  @param p il punto da confrontare con quello che esegue il metodo.
   *  @return <code>true</code> se il punto che esegue il metodo
   *    &egrave; sopra   quello passato come argomento,     
   *         <code>false</code> altrimenti.
   */

    public boolean isUp(Punto p){
	return false;
    }


 


/**
   * Restituisce il punto  <em>minXminY(p,p1)</em>,
   *  dove  <em>p</em> &egrave; il punto che esegue il metodo
   * e  <em>p1</em> &egrave; il punto passato come argomento.
   */


// usare i metodi statici min e max della classe Math

    public Punto minXminY(Punto p1){
	return null;
    }



/**
   * Restituisce il punto  <em>minXmaxY(p,p1)</em>,
   *  dove  <em>p</em> &egrave; il punto che esegue il metodo
   * e  <em>p1</em> &egrave; il punto passato come argomento.
   */


    public Punto minXmaxY(Punto p1){
	return null;
    }


/**
   * Restituisce il punto  <em>maxXminY(p,p1)</em>,
   *  dove  <em>p</em> &egrave; il punto che esegue il metodo
   * e  <em>p1</em> &egrave; il punto passato come argomento.
   */


    public Punto maxXminY(Punto p1){
	return null;
    }



/**
   * Restituisce il punto  <em>maxXmaxY(p,p1)</em>,
   *  dove  <em>p</em> &egrave; il punto che esegue il metodo
   * e  <em>p1</em> &egrave; il punto passato come argomento.
   */


    public Punto maxXmaxY(Punto p1){
	return null;
    }



/**
   * Confronta il punto rappresentato dall'oggetto che esegue il 
   * metodo con il punto specificato come argomento. 
   *  Restituisce  <code>true</code> se i punti sono uguali, 
   *    <code>false</code>   altrimenti.
   * @param p il punto da confrontare con quello che esegue il metodo.
   * @return <code>true</code> se il punto che esegue il metodo
   *    &egrave; uguale a quello passato come argomento,     
   *         <code>false</code> altrimenti.
   */


/* NOTA
   ====

Questo metodo *NON* riscrive il metodo equals della classe Object! 

La classe Punto ha due metodi equals (overloading):

- il metodo equals(Punto), che e' il metodo definito sotto;

- il metodo equals(Object), che e' ereditato dalla classe Object.

 */

  public boolean equals(Punto p) {
    return false;
  }





}// end class
