import java.awt.*;

/**
 * Tocka v 3D prostoru.
 */
public class Tocka {

    /**
     * x koordinata tocke.
     */
	public float x;
    
    /**
     * y koordinata tocke.
     */
	public float y;
    
    /**
     * z koordinata tocke.
     */
	public float z;
    
    /**
	 * Skonstruira novo tocko in jo postavi v izhodisce.
	 */
	public Tocka() {
		x = 0.f;
		y = 0.f;
		z = 0.f;
	}
    
    /**
	 * Skonstruira novo tocko in ji priredi podane koordinate. 
	 *@param x  x koordinata
	 *@param y  y koordinata
	 *@param z  z koordinata
	 */
	public Tocka(float x, float y, float z) {	
		this.x = x; 
		this.y = y;
		this.z = z;
	}
    
    /**
	 * Skonstruira novo tocko in ji priredi koordinate podane tocke.
	 *@param T  tocka
	 */
	public Tocka(Tocka T) {
		this.x = T.x; 
		this.y = T.y;
		this.z = T.z;
	}
	
	/**
	 * Testira ali sta tocki enaki. Vrne <code>true</code>, ce imata 
	 * tocki enake koordinate, drugace vrne <code>false</code>.
	 */
    public boolean equals(Object obj) {
    	if (obj instanceof Tocka) {
    	    Tocka t = (Tocka)obj;
    	    return ((x == t.x) && (y == t.y) && (z == t.z));
    	}
    	return false;
    }
	
	/**
	 * Izrise projekcijo tocke na eno izmed koordinatnih ravnin.
	 *@param  g  graficni kontekst kamor naj izrise
	 *@param  i  indeks prve osi ravnine (x - 0, y - 1, z - 2)
	 *@param  j  indeks druge osi ravnine (x - 0, y - 1, z - 2)
	 *@param x0  x koordinata izhodisca na canvasu
	 *@param y0  y koordinata izhodisca na canvasu
	 *@param  c  barva s katero naj izrise
	 */
	public void draw2D(Graphics g,int i,int j,int x0,int y0,Color c) {
		g.setColor(c);
		if(i == 0 && j == 1) { // x in y
			g.fillOval(-(int)this.x + x0 - 2,(int)this.y + y0 - 2,4,4);
		}
//		if(i == 0 && j == 2) { // x in z
		else {
			g.fillOval(-(int)this.x + x0 - 2,-(int)this.z + y0 - 2,4,4);
		}
	}
	
	/**
	 * Izrise tocko v 3D prostoru.
	 *@param g  graficni kontekst kamor naj izrise
	 *@param x0  x koordinata izhodisca na canvasu
	 *@param y0  y koordinata izhodisca na canvasu
	 *@param mat  matrika 3D transformacij
	 *@param c  barva s katero naj izrise
	 */
	public void draw3D(Graphics g,int x0,int y0,Matrix3D mat,Color c) {
			g.setColor(c);
			Tocka tt = mat.transform(this);	
			g.fillOval((int)tt.x + x0 - 2,(int)-tt.y + y0 - 2,4,4);
	}
	
	/**
	 * Znakovna prezentacija tocke.
	 * Vrne izpisane koordinate tocke.
	 */
	public String toString() {
		return (getClass().getName() + " [ " + x + ", " + y + ", " + z + " ]");
	}
}
