33 lines
839 B
Go
33 lines
839 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
)
|
|
|
|
func calcMin(maps []Map) float64 {
|
|
var minDist float64 = math.MaxFloat64
|
|
for _, m := range maps {
|
|
for _, path := range m.paths {
|
|
minDist = math.Min(minDist, calcMinPath(path, m.ponds))
|
|
}
|
|
}
|
|
return minDist
|
|
}
|
|
|
|
func calcMinPath(path Path, ponds []Pond) float64 {
|
|
var minDist float64 = math.MaxFloat64
|
|
for _, pond := range ponds {
|
|
for _, vertex := range pond.vertices {
|
|
cinitial := path.start.distance(path.end)
|
|
ainitial := path.end.distance(vertex)
|
|
c := path.start.distance(vertex)
|
|
alpha := math.Acos((ainitial*ainitial - cinitial*cinitial - c*c) / (-2 * cinitial * c))
|
|
height := math.Sin(alpha) * c
|
|
minDist = math.Min(minDist, height)
|
|
fmt.Printf("alpha: %f, c: %f, cinital: %f, ainitial: %F, h: %f\n", alpha, c, cinitial, ainitial, height)
|
|
}
|
|
}
|
|
return minDist
|
|
}
|