package geo

import (
	
)

// A N-Dimensional Vector with components (x, y, z, ...) based on the origin
type Vector []float64

// New Vector from components
func ( ...float64) Vector {
	return 
}

// New Vector of length and pointing in the direction of angle
func ( float64,  float64) Vector {
	return NewVector(
		*math.Sin(),
		*math.Cos(),
	)
}

// Creates a Vector by extending the length of the current one by length
func ( Vector) ( float64) Vector {
	return .Unit().Multiply(.Length() + )
}

func ( Vector) ( Vector) Vector {
	 := []float64{}
	for  := 0;  < len(); ++ {
		 = append(, []+[])
	}
	return 
}

func ( Vector) ( Vector) Vector {
	 := []float64{}
	for  := 0;  < len(); ++ {
		 = append(, []-[])
	}
	return 
}

func ( Vector) ( float64) Vector {
	 := []float64{}
	for  := 0;  < len(); ++ {
		 = append(, []*)
	}
	return 
}

func ( Vector) () float64 {
	 := 0.0
	for ,  := range  {
		 +=  * 
	}
	return math.Sqrt()
}

// Creates an unit Vector pointing in the same direction of this Vector
func ( Vector) () Vector {
	return .Multiply(1 / .Length())
}

func ( Vector) () *Point {
	return &Point{[0], [1]}
}

// return the line (x1,y1) -> (x2,y2) rotated 90% counter-clockwise (left)
func getNormalVector(, , ,  float64) (float64, float64) {
	return  - ,  - 
}

func (, , ,  float64) (float64, float64) {
	,  := getNormalVector(, , , )
	 := EuclideanDistance(, , , )
	return  / ,  / 
}

func ( Vector) () float64 {
	return float64(float32(math.Atan2([1], [0])))
}

func ( Vector) () float64 {
	return .Radians() * 180 / math.Pi
}

func ( Vector) () Vector {
	return .Multiply(-1)
}