(v Vector, w Vector)
| 109 | } |
| 110 | |
| 111 | func (p Vector) SegmentDistance(v Vector, w Vector) float64 { |
| 112 | l2 := v.DistanceSquared(w) |
| 113 | if l2 == 0 { |
| 114 | return p.Distance(v) |
| 115 | } |
| 116 | t := p.Sub(v).Dot(w.Sub(v)) / l2 |
| 117 | if t < 0 { |
| 118 | return p.Distance(v) |
| 119 | } |
| 120 | if t > 1 { |
| 121 | return p.Distance(w) |
| 122 | } |
| 123 | return v.Add(w.Sub(v).MulScalar(t)).Distance(p) |
| 124 | } |