yulijin608 发表于 2005-5-12 13:34:00

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

如题

fl202 发表于 2018-2-7 15:40:25

见以下链接:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=176590&page=1&extra=#pid809120

zfbj 发表于 2005-5-12 14:36:00

' 判断点是否在直线的右侧<BR>' 输入参数:pt:点;ptStart:直线的起点;ptEnd:直线的终点;bRight:点是否在直线的右侧<BR>' 输出参数:函数执行是否成功(如果不成功,是因为直线是水平的)<BR>Private Function PtToLine(ByVal pt As Variant, ByVal ptStart As Variant, ByVal ptEnd As Variant, ByRef bRight As Boolean) As Boolean<BR>                                ' 如果直线水平<BR>                                If Abs(ptStart(1) - ptEnd(1)) &lt; 0.0000001 Then<BR>                                                                PtToLine = False<BR>                                                                Exit Function<BR>                                End If<BR>                                <BR>                                ' 创建一个辅助的水平构造线<BR>                                Dim objXLine As AcadXline<BR>                                Dim ptTemp(0 To 2) As Double<BR>                                ptTemp(0) = pt(0) + 1: ptTemp(1) = pt(1): ptTemp(2) = pt(2)<BR>                                Set objXLine = ThisDrawing.ModelSpace.AddXline(pt, ptTemp)<BR>                                <BR>                                ' 获得构造线和已知直线的交点<BR>                                Dim ptIntersect As Variant<BR>                                Dim objLine As AcadLine<BR>                                Set objLine = ThisDrawing.ModelSpace.AddLine(ptStart, ptEnd)<BR>                                ptIntersect = objLine.IntersectWith(objXLine, acExtendBoth)<BR>                                <BR>                                ' 判断交点和已知点的位置关系<BR>                                If pt(0) &gt; ptIntersect(0) Then<BR>                                                                bRight = True<BR>                                Else<BR>                                                                bRight = False<BR>                                End If<BR>                                <BR>                                PtToLine = True<BR>End Function


Public Sub Test()<BR>                                Dim pt(0 To 2) As Double<BR>                                Dim pt1(0 To 2) As Double, pt2(0 To 2) As Double<BR>                                pt(0) = 100: pt(1) = 100: pt(2) = 0<BR>                                pt1(0) = 101: pt1(1) = 100: pt1(2) = 0<BR>                                pt2(0) = 102: pt2(1) = 50: pt2(2) = 0<BR>                                <BR>                                Dim bRight As Boolean<BR>                                If PtToLine(pt, pt1, pt2, bRight) Then<BR>                                                                If bRight Then<BR>                                                                                                MsgBox "点在直线的右侧"<BR>                                                                Else<BR>                                                                                                MsgBox "点在直线的左侧"<BR>                                                                End If<BR>                                End If<BR>End Sub

yulijin608 发表于 2005-5-12 14:52:00

谢谢版主,鲜花一朵

cbse_smy 发表于 2005-5-13 09:10:00

我认为以上的程序不是很正确!



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


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


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


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


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


QQ:284205614

zfbj 发表于 2005-5-13 13:06:00

谢谢指正,我所说的左右是指XOY平面上直线和点的位置关系。

932516 发表于 2005-5-13 13:17:00

如何判断直线上一点,是在起点(STARTPOINT)一端,还是终点一端(ENDPOINT)

cbse_smy 发表于 2005-5-13 15:11:00

如何判定是起点还是终点,如果是已有直线则查看其STARPOINT属性和ENDPOINT属性,若是两点话,则由你自己定义啦!

cbse_smy 发表于 2005-5-13 15:17:00

在OXY平面内直线与点的左右关系也与直线的起端点有关,因为我们所说的左右方向和人的面向有关,比如说我们面南则东是左而西是右,面北则相反,如果不指明面向而问你东在左还是右?你如何回答呢!对于直线,我们要确定是以立端点面起点还是以立起点面端点,才可以确定点对于直线的左右方向!

ljpnb 发表于 2005-5-13 15:33:00

可能有“上、下”比较确切些,所谓上方就是“正值”方向,下方就是“负值”方向,这里的“正负”以offset输入正负值偏移方向来定论的,当直线处于竖直状态时,那只能称之为“左右”方向。

932516 发表于 2005-5-13 20:23:00

我的问题有点愚蠢,判断两点距离大小就可以了
页: [1] 2
查看完整版本: [求助]请问怎么判断任意一点在直线的哪一侧?