danberlove 发表于 2010-1-17 22:15:00

LISP实现点与多边形位置关系判断

本帖最后由 作者 于 2010-1-17 23:38:08 编辑

小妹是学GIS的,编了个点与多边形位置关系判断的LISP程序,请多多指教哦~

vladimirputin 发表于 2023-3-9 14:37:07

非常不错的代码,谢谢楼主分享啊。

danberlove 发表于 2010-1-17 23:39:00

<p>sorry啊!!!</p><p>一开始的时候忘记把程序给传上来了,失敬失敬!!~~</p>

xiaoquansb 发表于 2010-7-15 12:32:00

不错哦,有意思

lqss 发表于 2010-7-16 17:14:00

<p>干什么用的呢?</p>

明_明 发表于 2010-7-17 13:01:00

<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div id="textstyle_4" style="FONT-SIZE: 12pt; OVERFLOW: hidden; WORD-BREAK: break-all; TEXT-INDENT: 0px; WORD-WRAP: break-word">
<p>是啊?干什么用的呢?</p></div></td></tr></tbody></table>

waterchen 发表于 2010-8-18 11:46:00

不錯哦,正是我想要的東西!謝謝樓主分享了。

another2121 发表于 2010-12-13 11:30:55

正在思考这个问题。。。谢谢。。。。

风流少年时 发表于 2010-12-26 02:56:35

我也不摘掉用来做什么的。楼主也应该不知道吧。

LIFEI18 发表于 2011-1-7 22:31:26

楼主,能不能编写一个判断一个图元相对另一个图元位置关系的程序。

zhynt 发表于 2011-6-5 01:52:27

;;判断点是否在方框内,参数:pt为待判断点,pt1~pt4为方框的四个角点
(defun point_inm (pt pt1 pt2 pt3 pt4 / dist1 dist2 dist3 dist4 pt pt1
                  pt2 pr3 pt4)
(setq        dist1 (point_line pt pt1 pt2)
        dist2 (point_line pt pt2 pt3)
        dist3 (point_line pt pt1 pt4)
        dist4 (point_line pt pt3 pt4)
)
(if (equal (+ dist1 dist2 dist3 dist4)
             (+ (distance pt1 pt2) (distance pt2 pt3))
             1e-10
      )
    t
    nil
)
)
;;测试点是否在多边形内.参数 p为待判断点,pm为组成多边形的点表
(defun ea:point_inm
       (p pm / point_x mx px1 pm edge_int_num pt_online_num)
(setq        point_x        (mapcar '(lambda (x) (car x)) pm)
        mx        (abs (- (apply 'max point_x) (car p)))
        px1        (polar p 0 (* mx 2))
)
(setq        pm              (append pm (list (nth 0 pm)))
        edge_int_num0
        pt_online_num 0
)
(while (> (length pm) 1)
    (setq pc (nth 0 pm)
          pn (nth 1 pm)
    )
    (if        (inters p px1 pc pn)
      (setq edge_int_num (+ 1 edge_int_num))
    )
    (if        (equal (angle p pc) 0 1e-5)
      (setq pt_online_num (+ 1 pt_online_num))
    )
    (if        (and (equal (angle p pc) 0 1e-5)
             (equal (angle p pn) 0 1e-5)
        )
      (setq pt_online_num (- pt_online_num 1))
    )
    (setq pm (cdr pm))
    (if        (= (rem (+ pt_online_num edge_int_num) 2) 1)
      t
      nil
    )
)
)
页: [1] 2 3
查看完整版本: LISP实现点与多边形位置关系判断