[求助]请问怎么判断任意一点在直线的哪一侧?
如题 见以下链接:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=176590&page=1&extra=#pid809120 ' 判断点是否在直线的右侧<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)) < 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) > 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 谢谢版主,鲜花一朵 我认为以上的程序不是很正确!
首先应当知道何是直线的左侧、右侧!
我想所述的直线应是矢量,即是有方向的,所以按左右应当按照右手定则来决定。
其次,如果点在直线上,自然无左右侧之说,故而应先判定点是否在此直线上,若是则返回一个错误。
再次,应当旋转Y轴,并使之与直线重合,注意Y轴也是矢量,即应当使O点与直线起点重合,Y轴方向应当在直线的端点方向上,再确定该点在新坐标系中X坐标,然判定其在左侧,还是右侧!
应该说明的是以上均在二维坐标系中,三维中点对于线来讲没有左右侧之说!
QQ:284205614 谢谢指正,我所说的左右是指XOY平面上直线和点的位置关系。 如何判断直线上一点,是在起点(STARTPOINT)一端,还是终点一端(ENDPOINT) 如何判定是起点还是终点,如果是已有直线则查看其STARPOINT属性和ENDPOINT属性,若是两点话,则由你自己定义啦! 在OXY平面内直线与点的左右关系也与直线的起端点有关,因为我们所说的左右方向和人的面向有关,比如说我们面南则东是左而西是右,面北则相反,如果不指明面向而问你东在左还是右?你如何回答呢!对于直线,我们要确定是以立端点面起点还是以立起点面端点,才可以确定点对于直线的左右方向! 可能有“上、下”比较确切些,所谓上方就是“正值”方向,下方就是“负值”方向,这里的“正负”以offset输入正负值偏移方向来定论的,当直线处于竖直状态时,那只能称之为“左右”方向。 我的问题有点愚蠢,判断两点距离大小就可以了
页:
[1]
2