明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2013|回复: 5

[求助] 如何判断点是否在多边形内部

[复制链接]
发表于 2021-2-13 22:46:39 | 显示全部楼层 |阅读模式
1明经币
如何判断点是否在多边形内部,有没有直接调用的方法。我用计算角度判断有些时候会出错。
用射线法的话任意多变形都可以判断吗?

 楼主| 发表于 2021-2-13 22:51:13 | 显示全部楼层
比如这种图形,想判断注记是否在多边形内部,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2021-2-18 08:37:26 | 显示全部楼层
首先,多边形的顶点按逆时针方向排序;
过点作垂直线,按顶点序列判别哪些边与此垂线相交,并求出交点的Y坐标;
将交点Y值从小到大排序,如果某个交点正好是多变形的顶点,那么就在序列中重复一次,按1、2、3、。。。的次序排列;
看点的Y值在上个序列中在什么位置来判别:
1、如在序列1-2、3-4、5-6、........中,那么点在多边形内部;
2、如在序列2-3、4-5、6-7、.......中,那么点在多边形外部;
3、如与序列中的某个值相同,那么点在多边形边界上;
4、如大于序列最大值、或小于序列最小值,那么点在多边形外部。
-----以上方法供参考

评分

参与人数 1明经币 +1 收起 理由
z123456Z + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-2-18 15:40:03 | 显示全部楼层
chenjun_nj 发表于 2021-2-18 08:37
首先,多边形的顶点按逆时针方向排序;
过点作垂直线,按顶点序列判别哪些边与此垂线相交,并求出交点的Y ...

谢谢,用射线法解决了。
回复

使用道具 举报

发表于 2021-3-3 19:33:34 | 显示全部楼层
回复

使用道具 举报

发表于 2021-9-8 02:47:13 | 显示全部楼层
;判断点在封闭线内
(defun &ssp (pt ssp / pt ssp x y)
(equal
  pi
  (abs (apply '+ (mapcar '(lambda (x y) (rem (- (angle pt x) (angle pt y)) pi) ) (reverse (cdr (reverse (cons (last ssp) ssp)))) ssp) ) )
  1e-6
)
)
例子:
(defun c:tes ()
(if (and (setq ent (entsel "\n请选择封闭多段线"))
          (setq ent (car ent))
          (= (cdr (assoc 0 (setq #g (entget ent)))) "LWPOLYLINE")
          (vlax-curve-isClosed ent)
          (setq lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= (car x) 10)) #g)))
          (setq p1 (getpoint "\n请选择点"))
     )
   (&ssp p1 lst)
)
);如果在封闭线内返回T,不在封闭线内返回nil
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 22:14 , Processed in 0.157775 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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