21 lines
433 B
Go
21 lines
433 B
Go
package calc
|
|
|
|
import "math"
|
|
|
|
// shortest distance between points on torus map
|
|
func ShortDistance(w, h uint32, x1, y1, x2, y2 float64) float64 {
|
|
return math.Hypot(Deltas(w, h, x1, y1, x2, y2))
|
|
}
|
|
|
|
func Deltas(w, h uint32, x1, y1, x2, y2 float64) (float64, float64) {
|
|
dx := math.Abs(x2 - x1)
|
|
dy := math.Abs(y2 - y1)
|
|
if dx > float64(w/2) {
|
|
dx = float64(h) - dx
|
|
}
|
|
if dy > float64(h/2) {
|
|
dy = float64(h) - dy
|
|
}
|
|
return dx, dy
|
|
}
|