[讨论学习]判断一个点在一条直线的左侧还是右侧
在编制自用小工具时遇到一个问题:如何判断一个点在一条直线的左侧还是右侧。在论坛里搜了一下,找到几个不同的解答,感觉采用向量的方式比较靠谱,于是简单写了出来,发给大家看看。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
lisp不是内积,就是外积 自贡黄明儒 发表于 2023-2-21 13:25
lisp不是内积,就是外积
lisp学了不到一个月,放弃了:Q- 那个精度设置为0.001感觉还是有点问题,当绘图尺度很小时,容易把不在线上的点判断到线上了。建议s/线段长度作为相对精度再来对比0.001估计就可以满足要求了。 chixun99 发表于 2023-2-21 18:33
那个精度设置为0.001感觉还是有点问题,当绘图尺度很小时,容易把不在线上的点判断到线上了。建议s/线段长 ...
有道理。这里也就是给大家提供个思路吧。
页:
[1]