package utilities;


public class Vektor {
	private double x, y;
	
	public Vektor (double x, double y){
		this.x = x;
		this.y = y;
	}	

	static double sqr (double x) {
			return x * x;
		}

	public double mul(Vektor v) {
		return x * v.getX() + y  * v.getY();
	}
	
	public Vektor mul(Matrix2x2 m){
		return new Vektor(x * m.getValue(1, 1) + y * m.getValue(1,2), x * m.getValue(2,1) + y * m.getValue(2, 2));
	}
	
	public Vektor sub(Vektor v){
		return new Vektor(x - v.getX(), y - v.getY());	
	}
	
	public Vektor add (Vektor v){
		return new Vektor(x + v.getX(), y + v.getY());	
	}
	
	public Vektor mul(double d){
		return new Vektor(x * d, y * d);
	}
	
	public Vektor div(double d){
		return new Vektor( x / d, y / d);
	}
	
	
	
	public double length() {
		return Math.sqrt(sqr(x) + sqr(y));
	}
	

	public double getX() {
		return x;
	}


	public double getY() {
		return y;
	}

	/**
	 * @param f
	 */
	public void setX(double f) {
		x = f;
	}

	/**
	 * @param f
	 */
	public void setY(double f) {
		y = f;
	}
	
	public String toString(){
		return "Vektor: (" + x + ", " + y + ")";
	}
	
	/******************************************************************
	 * Dreht den Vektor in mathematisch POSITIVER Drehrichtung. Also
	 * eigentlich linksherum.
	 * Da wir unser System verkehrt herum ist (rechts/links?) wird
	 * der Vektor aber genau so gedreht, wie wir das wollen
	 * (im Uhrzeigersinn).
	 * @return Den gedrehten Vektor
	 ******************************************************************/
	public Vektor turn(double angle){
	    angle = Geometrie.deg2rad(angle); //Math arbeitet mit Bogenmass
	    double cosAngle = Math.cos(angle);
	    double sinAngle = Math.sin(angle);
	    return mul(new Matrix2x2(cosAngle, -sinAngle, sinAngle, cosAngle)); 
	}
}
