明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7404|回复: 15

[求助]请问怎么判断任意一点在直线的哪一侧?

  [复制链接]
发表于 2005-5-12 13:34 | 显示全部楼层 |阅读模式
如题
发表于 2018-2-7 15:40 | 显示全部楼层
发表于 2005-5-12 14:36 | 显示全部楼层
' 判断点是否在直线的右侧
' 输入参数:pt:点;ptStart:直线的起点;ptEnd:直线的终点;bRight:点是否在直线的右侧
' 输出参数:函数执行是否成功(如果不成功,是因为直线是水平的)
Private Function PtToLine(ByVal pt As Variant, ByVal ptStart As Variant, ByVal ptEnd As Variant, ByRef bRight As Boolean) As Boolean
' 如果直线水平
If Abs(ptStart(1) - ptEnd(1)) < 0.0000001 Then
PtToLine = False
Exit Function
End If

' 创建一个辅助的水平构造线
Dim objXLine As AcadXline
Dim ptTemp(0 To 2) As Double
ptTemp(0) = pt(0) + 1: ptTemp(1) = pt(1): ptTemp(2) = pt(2)
Set objXLine = ThisDrawing.ModelSpace.AddXline(pt, ptTemp)

' 获得构造线和已知直线的交点
Dim ptIntersect As Variant
Dim objLine As AcadLine
Set objLine = ThisDrawing.ModelSpace.AddLine(ptStart, ptEnd)
ptIntersect = objLine.IntersectWith(objXLine, acExtendBoth)

' 判断交点和已知点的位置关系
If pt(0) > ptIntersect(0) Then
bRight = True
Else
bRight = False
End If

PtToLine = True
End Function Public Sub Test()
Dim pt(0 To 2) As Double
Dim pt1(0 To 2) As Double, pt2(0 To 2) As Double
pt(0) = 100: pt(1) = 100: pt(2) = 0
pt1(0) = 101: pt1(1) = 100: pt1(2) = 0
pt2(0) = 102: pt2(1) = 50: pt2(2) = 0

Dim bRight As Boolean
If PtToLine(pt, pt1, pt2, bRight) Then
If bRight Then
MsgBox "点在直线的右侧"
Else
MsgBox "点在直线的左侧"
End If
End If
End Sub
 楼主| 发表于 2005-5-12 14:52 | 显示全部楼层
谢谢版主,鲜花一朵
发表于 2005-5-13 09:10 | 显示全部楼层
我认为以上的程序不是很正确!



首先应当知道何是直线的左侧、右侧!


我想所述的直线应是矢量,即是有方向的,所以按左右应当按照右手定则来决定。


其次,如果点在直线上,自然无左右侧之说,故而应先判定点是否在此直线上,若是则返回一个错误。


再次,应当旋转Y轴,并使之与直线重合,注意Y轴也是矢量,即应当使O点与直线起点重合,Y轴方向应当在直线的端点方向上,再确定该点在新坐标系中X坐标,然判定其在左侧,还是右侧!


应该说明的是以上均在二维坐标系中,三维中点对于线来讲没有左右侧之说!


QQ:284205614
发表于 2005-5-13 13:06 | 显示全部楼层
谢谢指正,我所说的左右是指XOY平面上直线和点的位置关系。
发表于 2005-5-13 13:17 | 显示全部楼层
如何判断直线上一点,是在起点(STARTPOINT)一端,还是终点一端(ENDPOINT)
发表于 2005-5-13 15:11 | 显示全部楼层
如何判定是起点还是终点,如果是已有直线则查看其STARPOINT属性和ENDPOINT属性,若是两点话,则由你自己定义啦!
发表于 2005-5-13 15:17 | 显示全部楼层
在OXY平面内直线与点的左右关系也与直线的起端点有关,因为我们所说的左右方向和人的面向有关,比如说我们面南则东是左而西是右,面北则相反,如果不指明面向而问你东在左还是右?你如何回答呢!对于直线,我们要确定是以立端点面起点还是以立起点面端点,才可以确定点对于直线的左右方向!
发表于 2005-5-13 15:33 | 显示全部楼层
可能有“上、下”比较确切些,所谓上方就是“正值”方向,下方就是“负值”方向,这里的“正负”以offset输入正负值偏移方向来定论的,当直线处于竖直状态时,那只能称之为“左右”方向。
发表于 2005-5-13 20:23 | 显示全部楼层
我的问题有点愚蠢,判断两点距离大小就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 16:53 , Processed in 0.432914 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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