llsheng_73 发表于 2013-3-27 16:49:34

判断点是否在多边形内的一个另类实现

关于点是否在多边形内,现在到处都能找到很成熟的算法,
但我想到的是不通过计算,而通过选择集来判断它
比如给定一个点p,和一个多边形E
首先检查E是否闭合(如果不闭合当然不需要去判断它了)
如果E是闭合的,那去得到它的顶点坐标列表pt
接下来在P位置绘制一个点
用entlast得到这个点的图元名称e
用SSGET "WP" PT得到一个选择集并把它换成图元名列表s
如果(MEMBER e s)为真那么P点就在E内,否则在E外

最后删除掉绘制的那个点

wjl1014 发表于 2013-3-27 16:58:39

发出来看看。

llsheng_73 发表于 2013-3-27 17:16:49

(defun SStoES(s / m n e)
(if s(progn
       (setq n(sslength s)m 0)
       (while(< m n)
           (setq e(if e(append e(list(ssname s m)))(list(ssname s m)))m(1+ m))))
    )e)

(defun PoInPl(P PL / e1 e2)
(entmake(list(cons 0 "POINT")(cons 8 "0")(list 10 (car p)(cadr p)0)))
(setq e1(entlast)
        e2(sstoes(ssget"CP"pl'((0 . "POINT")(8 . "0"))))
        e2(if(member e1 e2)t))
(entdel e1)
e2)

自己发的帖子怎么对它进行编辑呀,菜鸟一个只能对自己的进行回复

logoin 发表于 2013-3-27 20:47:04

要排除其他因素影响,数学方法是最可靠的
用选择的方法影响因素有
点不在视区内,就选不到了
很多对象在线内,线又有很多节点时,你就会发现内存不够用
...

自贡黄明儒 发表于 2013-3-27 23:30:01

对于多边形,这种办法还是不错的哈。

gtj116600 发表于 2013-5-30 16:01:26

好办法,鼓励。

gtj116600 发表于 2013-5-30 16:02:00

好办法,鼓励。要验证试一下

gtj116600 发表于 2013-5-30 16:02:39

好办法,鼓励。要验证试一下

gtj116600 发表于 2013-5-30 16:17:07

好办法,鼓励。要验证试一下。

陈亚娣 发表于 2014-4-10 11:35:48

好办法!!llsheng_73,总能想出与众不同的方法~值得学习!!!
页: [1] 2
查看完整版本: 判断点是否在多边形内的一个另类实现