// distance.go
// Find Euclidean distance between two points
// time complexity: O(n) where n is the number of dimensions
// space complexity: O(1)
// author(s) [Chetan Patil](https://github.com/Chetan07j)
// Package geometry contains geometric algorithms
package geometry
import (
"errors"
"math"
)
// EuclideanPoint defines a point with x and y coordinates.
type EuclideanPoint []float64
var ErrDimMismatch = errors.New("mismatched dimensions")
// EuclideanDistance returns the Euclidean distance between points in
// any `n` dimensional Euclidean space.
func EuclideanDistance(p1 EuclideanPoint, p2 EuclideanPoint) (float64, error) {
n := len(p1)
if len(p2) != n {
return -1, ErrDimMismatch
}
var total float64 = 0
for i, x_i := range p1 {
// using Abs since the value could be negative but we require the magnitude
diff := math.Abs(x_i - p2[i])
total += diff * diff
}
return math.Sqrt(total), nil
}