小美菜 发表于 2005-1-1 19:46:00

紧急求助!!

大家新年好!
                         我有两问题紧急求助:
                                 1、如何确定一个点在一个区域内,特别是不规则的多边形
                                       2、如何求一个点到直线的距离。
         谢谢各位

liub1979 发表于 2005-1-2 13:50:00

第1 我也问过,你先看看吧
第2 我也想知道哦 : )

小美菜 发表于 2005-1-2 20:43:00

谢谢!我已经解决了
Public Function Fun点在指定区域内(ByVal ePnt As Variant, ByVal objPnt As AcadEntity) As Boolean
                       Dim L As Integer, I As Integer, xPnt As Variant, sPnt(2) As Double, iPnt As Variant, xLine As AcadLine
                       sPnt(0) = -99999: sPnt(1) = -99999
                       Set xLine = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)
                       xPnt = objPnt.IntersectWith(xLine, acExtendNone)
                       xLine.Delete: I = UBound(xPnt)
                       I = Int(I / 3) + 1
                       L = I - Int(I / 2) * 2
                       If L = 0 Then Fun点在指定区域内 = False Else Fun点在指定区域内 = True
End Function

zfbj 发表于 2005-1-2 23:26:00

(1)你的解决方案可能不够全面,如果点在多边形外面,有可能会跟在其内部得到的交点一致;
最后用射线多做几个角度,分别检测交点。
(2)用数学的方法来计算吧。

tfyyf 发表于 2005-1-3 07:34:00

(2)如果你只想求点到直线的距离,可以用三角形面积法:
点到直线的距离=(三条边长求出的面积)/直线边长*2

liub1979 发表于 2005-1-3 16:57:00

tfyyf送你花一朵呵呵

laoliu09 发表于 2005-1-4 15:38:00

判断点a是否在n边形内,可以先将n边形的各顶点排好顺序,顺时针或逆时针都可以,然后将a点和n边形各个顶点连结起来,这样就形成n个以点a为顶点的三角形了,如果各三角形顶角之和为360度,则点a在n边形内,否则点a在n边形外!
不知道这个方法是不是最简单的!
页: [1]
查看完整版本: 紧急求助!!