@@ -190,6 +190,30 @@ public double Length
190
190
}
191
191
}
192
192
193
+ public double DistanceToSegment ( Vector3 start , Vector3 end )
194
+ {
195
+ var segmentDelta = end - start ;
196
+ var segmentLength = segmentDelta . Length ;
197
+ var segmentNormal = segmentDelta . GetNormal ( ) ;
198
+ var deltaToStart = this - start ;
199
+ var distanceFromStart = segmentNormal . Dot ( deltaToStart ) ;
200
+ if ( distanceFromStart >= 0 && distanceFromStart < segmentLength )
201
+ {
202
+ var perpendicular = segmentNormal . GetPerpendicular ( new Vector3 ( 0 , 0 , 1 ) ) ;
203
+ var distanceFromLine = Math . Abs ( deltaToStart . Dot ( perpendicular ) ) ;
204
+ return distanceFromLine ;
205
+ }
206
+
207
+ if ( distanceFromStart < 0 )
208
+ {
209
+ return deltaToStart . Length ;
210
+ }
211
+
212
+ var deltaToEnd = this - end ;
213
+ return deltaToEnd . Length ;
214
+ }
215
+
216
+
193
217
#endregion public double Length
194
218
195
219
#region public double LengthSquared
@@ -680,7 +704,12 @@ public Vector3 GetPerpendicular()
680
704
// the input vector has no length (no vector is perpendicular to it)
681
705
return default ( Vector3 ) ;
682
706
}
683
-
707
+
708
+ public Vector3 GetPerpendicular ( Vector3 b )
709
+ {
710
+ return GetPerpendicular ( this , b ) ;
711
+ }
712
+
684
713
public static Vector3 GetPerpendicular ( Vector3 a , Vector3 b )
685
714
{
686
715
if ( ! Collinear ( a , b , Zero ) )
0 commit comments