网站公告列表 [路桥吾爱]全新改版,正在为打造一个真正属于路桥人自己并完全免费的网络空间而努力。新站启用了多线路镜像空间,让您无论使用哪种线路都能体会到不错的速度。本站继续坚持“我为人人,人人为我”的精神,鼓励大家发布并免费共享自己收藏的资料。现在加入让我们与[路桥吾爱]共同成长,有了您的加入我们会更加优秀!
 
收藏本站
会员中心
用户注册
您现在的位置: 路桥吾爱 >> 文章中心 >> 其他相关 >> 测绘 >> 文章正文
  判断点xpt是否在多边形内            【字体:
判断点xpt是否在多边形内

;判断点xpt是否在多边形内
;所选射线xpt(x0 y0)--pxy(x0+max|x0-xi| y0+min|y0-yi|) [i=1,2 3,.......,n]不与多边形任何一点相交
;入口参数多边形:xdb((x1 y1) (x2 y2) (x3 y3)……(xn yn))及待判断点xpt(x0 y0)
;返回值0(在多边形外)、1(在多边形上)、2(在多边形内)
(defun dzdbxn(xdb xpt / fhz mxb myb n i mx my nn p1 p2 p12 pxy)
    (vl-load-com)
    (setq fhz 0 mxb nil myb nil n (length xdb) i 0
          xdb (append xdb (list (car xdb)))
)
; 判断点xpt是否在多边形上
    (while(< i n)
        (setq p1 (nth i xdb) p2 (nth (1+ i) xdb))
        (command "line" p1 p2 "" "chprop" (entlast) "" "c" 9 "")
        (setq p12 (vlax-curve-getclosestpointto (vlax-ename->vla-object (entlast)) xpt))
        (entdel (entlast))
        若xpt至某一边的距离为零,则xpt在多边形上,因计算误差,设10的-6次方为与零的比较误差
        (if (equal (distance xpt p12) 0.0 1e-6) (setq fhz 1 i n))
        (setq i (1+ i))
    )
(if (/= fhz 1)
     判断点xpt是否在多边形内
        (progn
        (foreach p12 xdb
           (setq mxb (append mxb (list (abs (- (car xpt) (car p12)))))
               myb (append myb (list (abs (- (cadr xpt) (cadr p12)))))
           )
        )
           (setq pxy (mapcar '+ xpt (list (* 2.0 (apply 'max mxb)) (apply 'min myb)))
          i 0   nn 0
           )
           (repeat n
           (if (inters xpt pxy (nth i xdb) (nth (1+ i) xdb)) (setq nn (1+ nn)))
           (setq i (1+ i))
           )
           (if (and (> nn 0) (/= nn (* (fix (/ nn 2.0)) 2.0))) (setq fhz 2))
        )
    )
    (setq fhz fhz)
)

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    粤ICP备06026757号
    站长:白黑点击这里和我QQ聊天-进入[路桥吾爱]新版