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 }