LISP实现点与多边形位置关系判断
本帖最后由 作者 于 2010-1-17 23:38:08 编辑小妹是学GIS的,编了个点与多边形位置关系判断的LISP程序,请多多指教哦~ 非常不错的代码,谢谢楼主分享啊。 <p>sorry啊!!!</p><p>一开始的时候忘记把程序给传上来了,失敬失敬!!~~</p> 不错哦,有意思 <p>干什么用的呢?</p> <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> 不錯哦,正是我想要的東西!謝謝樓主分享了。 正在思考这个问题。。。谢谢。。。。 我也不摘掉用来做什么的。楼主也应该不知道吧。 楼主,能不能编写一个判断一个图元相对另一个图元位置关系的程序。 ;;判断点是否在方框内,参数: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
)
)
)