clement 发表于 2006-4-16 16:48:00

为什么多边形边的延长线上的点与多边形用IntersectWith求交点时候返回值也不为空

<P>写了一个判断点是否在多边形的某条边上的程序,<BR>以白色部分作为边界的时候,当取某条边延长线(红色部分)上的点时,</P>
<P>请问什么结果不正确?</P>
<P>Private Sub TestOnBoundary()<BR>&nbsp; Dim TestPoint As Variant<BR>&nbsp; Dim Util As AcadUtility<BR>&nbsp; Dim Entity As AcadEntity<BR>&nbsp; Dim PickPt As Variant<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; Set Util = ThisDrawing.Utility<BR>&nbsp; On Error GoTo Done<BR>&nbsp; Util.GetEntity Entity, PickPt, "Select region: "<BR>&nbsp; Do While (True)<BR>&nbsp;&nbsp;&nbsp; TestPoint = Util.GetPoint(, vbCrLf &amp; "Test point: ")<BR>&nbsp;&nbsp;&nbsp; If IsPointOnBoundary(TestPoint, Entity) Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Util.Prompt (vbCrLf &amp; "Point is on the boundary")<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Util.Prompt (vbCrLf &amp; "Point is not on the boundary")<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp; Loop<BR>Done:<BR>End Sub</P>
<P>Private Function IsPointOnBoundary( _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal varPnt As Variant, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal objBoundary As AcadEntity) As Boolean<BR>&nbsp; Dim objDoc As AcadDocument<BR>&nbsp; Dim objBlock As AcadBlock<BR>&nbsp; Dim objPnt As AcadPoint<BR>&nbsp; Dim varPnts As Variant<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; Set objDoc = objBoundary.Document<BR>&nbsp; Set objBlock = objDoc.ObjectIdToObject(objBoundary.OwnerID)<BR>&nbsp; <BR>&nbsp; Set objPnt = objBlock.AddPoint(varPnt)<BR>&nbsp; varPnts = objPnt.IntersectWith(objBoundary, acExtendNone)<BR>&nbsp; IsPointOnBoundary = UBound(varPnts) &gt; 0<BR>&nbsp; objPnt.Delete<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>End Function</P>

雪山飞狐_lzh 发表于 2006-4-18 21:35:00

<P>点和实体怎么会有交点?</P>
<P>过该点做一条直线,如果直线和边界的交点在该点,则点在边界上</P>

clement 发表于 2006-4-19 09:05:00

<P>点在边界上的时候当然就有交点了,如果没记错的话做射线那种方法测的是否在边界内部</P>

雪山飞狐_lzh 发表于 2006-4-19 13:32:00

<P>仔细看一下我的方法!和以前的射线法不一样的</P>

clement 发表于 2006-4-19 20:52:00

明白了:)
页: [1]
查看完整版本: 为什么多边形边的延长线上的点与多边形用IntersectWith求交点时候返回值也不为空