明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3648|回复: 15

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

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

最后删除掉绘制的那个点

点评

相当于假借acad之手,帮你计算了。思路可行。 但明白其数值算法,更有意义。  发表于 2013-3-27 17:02
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-3-27 16:58 | 显示全部楼层
发出来看看。
 楼主| 发表于 2013-3-27 17:16 | 显示全部楼层
(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 "OINT")(cons 8 "0")(list 10 (car p)(cadr p)0)))
  (setq e1(entlast)
        e2(sstoes(ssget"CP"pl'((0 . "OINT")(8 . "0"))))
        e2(if(member e1 e2)t))
  (entdel e1)
  e2)

自己发的帖子怎么对它进行编辑呀,菜鸟一个只能对自己的进行回复
发表于 2013-3-27 20:47 | 显示全部楼层
要排除其他因素影响,数学方法是最可靠的
用选择的方法影响因素有
点不在视区内,就选不到了
很多对象在线内,线又有很多节点时,你就会发现内存不够用
...
发表于 2013-3-27 23:30 | 显示全部楼层
对于多边形,这种办法还是不错的哈。
发表于 2013-5-30 16:01 | 显示全部楼层
好办法,鼓励。
发表于 2013-5-30 16:02 | 显示全部楼层
好办法,鼓励。要验证试一下
发表于 2013-5-30 16:02 | 显示全部楼层
好办法,鼓励。要验证试一下
发表于 2013-5-30 16:17 | 显示全部楼层
好办法,鼓励。要验证试一下。
发表于 2014-4-10 11:35 | 显示全部楼层
好办法!!llsheng_73,总能想出与众不同的方法~值得学习!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 19:01 , Processed in 0.362114 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表