明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1173|回复: 4

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

[复制链接]
发表于 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学了不到一个月,放弃了
发表于 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/线段长 ...

有道理。这里也就是给大家提供个思路吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 21:31 , Processed in 0.168754 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表