/**
 * Geometrijski vektor v 3D prostoru.
 */
public class Vektor {

    /**
     * x komponenta vektorja.
     */
	public float x;
    
    /**
     * y komponenta vektorja.
     */
	public float y;
    
    /**
     * z komponenta vektorja.
     */
	public float z;
    
    /**
     * Skonstruira nov vektor (nedolocen).
     */
    public Vektor() {}
    
    /**
     * Skonstruira nov krajevni vektor do podane tocke.
     *@param T  tocka
     */
    public Vektor(Tocka T) {
       	x = T.x;
    	y = T.y;
    	z = T.z;    
    }
    
    /**
     * Skonstruira nov vektor med tockama.
     * Vektor je usmerjen od tocke T1 proti tocki T2.
     *@param T1  prva tocka
     *@param T2  druga tocka
     */
    public Vektor(Tocka T1,Tocka T2) { 
    	x = T2.x - T1.x;	
		y = T2.y - T1.y;
		z = T2.z - T1.z;
    }
    
    /**
     * Izracuna in priredi komponente vektorja vektorskemu produktu.
     * Vektorski produkt se izracuna kot <code>V1 × V2</code>.
     *@param V1  prvi vektor
     *@param V2  drugi vektor
     */
    public void vektProd(Vektor V1,Vektor V2) {
        x =  V1.y * V2.z - V1.z * V2.y;
        y = -V1.x * V2.z + V1.z * V2.x;
        z =  V1.x * V2.y - V1.y * V2.x;
    }
	
	/**
	 * Normira vektor. 
	 */
    public void normVekt() {
        float d = (float)(Math.sqrt((double)(x * x + y * y + z * z)));
        x /= d;
        y /= d;
        z /= d;
    }
    
    /**
	 * Priredi komponente vektorja normiranu vektorju V.
     *@param V  vektor
	 */
    public void normVekt(Vektor V) {
        float d = (float)(Math.sqrt((double)(V.x * V.x + V.y * V.y + V.z * V.z)));
        x = V.x / d;
        y = V.y / d;
        z = V.z / d;
    }
    
    /**
     * Izracuna in vrne skalarni produkt z vektorjem.
     *@param V  vektor
     */
    public float scalProd(Vektor V) {
        float prod;
        prod = x * V.x + y * V.y + z * V.z;
        return prod;
    }
    
    /**
     * Pomnozi komponente vektorja s skalarjem.
     *@param s  skalirni koeficient
     */
    public void scalProd(float s) {
        x *= s;
        y *= s;
        z *= s;
    }
	
	/**
	 * Testira ali sta vektorja enaka. Vrne <code>true</code>, ce imata 
	 * vektorja enake komponente, drugace vrne <code>false</code>.
	 */
    public boolean equals(Object obj) {
    	if (obj instanceof Vektor) {
    	    Vektor V = (Vektor)obj;
    	    return ((x == V.x) && (y == V.y) && (z == V.z));
    	}
    	return false;
    }
	
	/**
	 * Znakovna prezentacija vektorja.
	 * Vrne izpisane komponente vektorja.
	 */
    public String toString() {
		return (getClass().getName() + " = [ " + x + ", " + y + ", " + z + " ]");
	}
}
