判断点是否在多边形内的一个另类实现
关于点是否在多边形内,现在到处都能找到很成熟的算法,但我想到的是不通过计算,而通过选择集来判断它
比如给定一个点p,和一个多边形E
首先检查E是否闭合(如果不闭合当然不需要去判断它了)
如果E是闭合的,那去得到它的顶点坐标列表pt
接下来在P位置绘制一个点
用entlast得到这个点的图元名称e
用SSGET "WP" PT得到一个选择集并把它换成图元名列表s
如果(MEMBER e s)为真那么P点就在E内,否则在E外
最后删除掉绘制的那个点
发出来看看。 (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)
自己发的帖子怎么对它进行编辑呀,菜鸟一个只能对自己的进行回复 要排除其他因素影响,数学方法是最可靠的
用选择的方法影响因素有
点不在视区内,就选不到了
很多对象在线内,线又有很多节点时,你就会发现内存不够用
... 对于多边形,这种办法还是不错的哈。 好办法,鼓励。 好办法,鼓励。要验证试一下 好办法,鼓励。要验证试一下 好办法,鼓励。要验证试一下。 好办法!!llsheng_73,总能想出与众不同的方法~值得学习!!!
页:
[1]
2