設平面上有點A(xa,ya),點B(xb,yb),點C(xc,yc),連接AB,問:如何用VB代碼判斷C點是否在線段AB上?
代碼如下:
Public Function JudgmentPointOnline(xa As Single, ya As Single, xb As Single, yb As Single, xc As Single, yc As Single,Optional fuzzyDistance As Single) As Boolean
If Sqr((xa- xb) ^ 2 + (ya- yb) ^ 2) + fuzzyDistance >= Sqr((xa- xc) ^ 2 + (ya- yc) ^ 2) + Sqr((xb- xc) ^ 2 + (yb- yc) ^ 2) Then
JudgmentPointOnline = True
End If
End Function
原理很簡單:
原理基礎:三角形兩邊之和必定大於第三邊。
通過判斷線段AB的長與線段AC+BC的長度關係,就能確定點C與線段AB的大致距離。如果C在AB上,則AC+BC=AB;只要C不在AB上,AC+BC>AB。
因爲有時候需要近似在AB上就可以了,故上述代碼中加入了一個可選參數fuzzyDistance(模糊距離)用來增加判定範圍。