找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 667|回复: 6

[求助] [求助]:如何判断一个点再一个封闭的区域内?

[复制链接]
发表于 2004-5-30 13:40:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
如何判断一个点再一个封闭的区域内?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-30 17:09:07 | 显示全部楼层
自己搜索一下,已经有过讨论的帖子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-13 16:48:18 | 显示全部楼层
我这里提供一个新思路,
1在多边形上寻找距给定点pt1最近的点(vlax-curve-getclosedpointto ......)->pt2 ,取得它们之间的距离d.
2,以pt1为圆心略小于d的半径画一圆
3.把二维多边形和圆分别转换为面域REG1和REG2
4.求这两个面域的交集(VLA-BOOLEAN VLA_REG1 INTERSECT VLA_REG2),
5.最后REG1的面积值若与所画的圆的面积相同,
则点在多边形内部,否则在外部.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-13 16:57:34 | 显示全部楼层
这不算什么新思路,以前的帖子里有
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-13 18:32:00 | 显示全部楼层
lzh在明经也提出过(我没认错人吧?哈哈)
现在在晓东cad做哪个版块的斑竹?vba的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-13 18:53:06 | 显示全部楼层
没认错,在晓东还是老本行vba
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-17 01:51:50 | 显示全部楼层
这确实是我自己想出来的,以前的贴子我没看仔细

附上程序代码
;;测试点与区域的关系,用命令行的方法创建面域


(defun c:pct
             (/  POG POIO POI closedptO closedpt DIS pog1 CIR AREA AREAN)
     
     (setvar "cmdecho" 0)
     (SETQ   pog  (SSE '((0 . "*YLINE,SPLINE,CIRCLE,ELLIPSE"))
                       "\n请选择测试区域边界线(平面曲线):"
                       )
           )
     (if (and (WCMATCH (cdr (assoc 0 (entget pog))) "*YLINE,SPLINE")
              (= (REM (cdr (assoc 70 (entget pog))) 2) 0)
              )
          (alert "所选曲线不闭合!")
          (progn
               (setq poiO (GETPOINT "\n请选择测试点:"))
               (COND
                    ((WCMATCH (cdr (assoc 0 (entget pog))) "LWPOLYLINE")
                     (SETQ POI (LIST (CAR POIO)
                                     (CADR POIO)
                                     (VLA-GET-ELEVATION
                                          (vlax-ename->vla-object POG)
                                          )
                                     )
                           )
                     )
                    (T
                     (SETQ POI (LIST (CAR POIO)
                                     (CADR POIO)
                                     (CADDDR (ASSOC 10 (ENTGET POG)))
                                     )
                           )
                     )
                    )
               (SETQ closedptO (vlax-curve-getclosestpointto
                                    (vlax-ename->vla-object pog)
                                    poiO
                                    )
                     closedpt  (vlax-curve-getclosestpointto
                                    (vlax-ename->vla-object pog)
                                    poi
                                    )
                     )
               (if (= (DISTANCE poiO closedptO) 0)
                    (alert "点在边界上!")
                    (progn
                         (setq dis (* (DISTANCE poi closedpt) 0.5))
                         (vl-cmdf "copy" pog "" POI POI)
                         (vl-cmdf "region" (entlast) "")
                         (setq pog1 (entlast))
                         (vl-cmdf "CIRCLE" POI DIS "")
                         (vl-cmdf "region" (entlast) "")
                         (setq cir  (entlast)
                               AREA (VLA-GET-AREA
                                         (vlax-ename->vla-object pog1)
                                         )
                               )
                         (vl-cmdf
                              "union"
                              pog1
                              cir
                              ""
                              )
                         (setq
                              AREAN (vla-get-area
                                         (vlax-ename->vla-object pog1)
                                         )
                              )
                         (entdel (entlast))
                         (COND ((= AREA AREAN)
                                (ALERT "点在边界内!")
                                )
                               (T (ALERT "点在边界外!"))
                               )
                         )
                    )
               )
          )
     (setvar "cmdecho" 0)
     (PRINC)
     )
(VLAX-ADD-CMD "PCT" 'PCT)
(defun SSE (filter msg / el)
     (while (not (and
                      (setq el (car (entsel msg)))
                      (WCMATCH (cdr (ASSOC 0 (entget el)))
                               (cdr (nth 0 filter))
                               )
                      (vlax-curve-isPlanar (vlax-ename->vla-object EL))
                      )
                 )


          (prompt
               (strcat "\n选中1个" (cdr (ASSOC 0 (entget el))) "对象")
               )

          )
     (setq el el)
     )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 06:54 , Processed in 0.188470 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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