【VB6】判斷點是否在線段上的簡單算法

設平面上有點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(模糊距離)用來增加判定範圍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章