陈宫在家吗 发表于 2023-2-21 09:08:06

[讨论学习]判断一个点在一条直线的左侧还是右侧

在编制自用小工具时遇到一个问题:如何判断一个点在一条直线的左侧还是右侧。在论坛里搜了一下,找到几个不同的解答,感觉采用向量的方式比较靠谱,于是简单写了出来,发给大家看看。



Private Function LOrR(ByVal ptStart As Variant, ByVal ptEnd As Variant, ByVal ptGet As Variant) As Integer
' 判断点ptGet在直线ptStart→ptEnd的左侧还是右侧
' 输入直线起点ptStart、终点ptEnd、指定点ptGet
' 若ptGet在直线之上,LOrR=0;在直线左侧,LOrR=1;在直线右侧,LOrR=-1

    Dim s As Double
    s = (ptStart(0) - ptGet(0)) * (ptEnd(1) - ptGet(1)) - (ptStart(1) - ptGet(1)) * (ptEnd(0) - ptGet(0))
   
    If Abs(s) < 0.001 Then   ' ptGet 在ptStart→ptEnd线上
      LOrR = 0
    ElseIf s > 0 Then         ' ptGet 在ptStart→ptEnd线的左侧
      LOrR = 1
    Else                  ' ptGet 在ptStart→ptEnd线的右侧
      LOrR = -1
    End If

End Function

自贡黄明儒 发表于 2023-2-21 13:25:06

lisp不是内积,就是外积

陈宫在家吗 发表于 2023-2-21 14:50:48

自贡黄明儒 发表于 2023-2-21 13:25
lisp不是内积,就是外积

lisp学了不到一个月,放弃了:Q-

chixun99 发表于 2023-2-21 18:33:53

那个精度设置为0.001感觉还是有点问题,当绘图尺度很小时,容易把不在线上的点判断到线上了。建议s/线段长度作为相对精度再来对比0.001估计就可以满足要求了。

陈宫在家吗 发表于 2023-2-22 10:35:07

chixun99 发表于 2023-2-21 18:33
那个精度设置为0.001感觉还是有点问题,当绘图尺度很小时,容易把不在线上的点判断到线上了。建议s/线段长 ...

有道理。这里也就是给大家提供个思路吧。
页: [1]
查看完整版本: [讨论学习]判断一个点在一条直线的左侧还是右侧