明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: DOKNOW

[讨论]如何判断点是否在在闭合曲线内(PL、SPLINE)

  [复制链接]
发表于 2006-4-30 17:58:00 | 显示全部楼层
HuaiYu发表于2006-4-30 12:35:00 要求一点必在闭合的一多边形之内或之外: 首先判断此多边形是否为逆时针,若为顺时针则转化为逆时针运算(也可都转化为顺时针来运算),然后根...


注意不是多边形,而是任意曲线,如SPLINE线.

面积/射线等都不如这个简单,不容易出错.我相信这是速度最快的一种方法.

无痕老大发句话呀!!!

发表于 2006-4-30 20:37:00 | 显示全部楼层

好,不错。不过你不也说你的可能会出问题吗?我那个方法就不会错的,无论是 spline 或者是别的都中可以的。这个算法我在程序中用过,至今还没有出过问题。这个可用来指定向外或向内偏移。你的那个法线再加上 ang 我的也是这样的,但是你不能判断那个点一定在外面还是在里面啊。所以还得加上时针的方向才行的。

发表于 2006-4-30 21:22:00 | 显示全部楼层

对于PLINE线你的方法可能没问题,请教对于SPLINE,怎么判断顺时针和逆时针?

 

发表于 2006-5-1 14:01:00 | 显示全部楼层

if you download this file,please change the Extent .txt to .vlx.

please test this file,if there is problem,please let me know

本帖子中包含更多资源

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

x
发表于 2006-5-1 23:20:00 | 显示全部楼层

用射线法:如果交点为切点(可能还有“拐点”---不好表达〕要算两个交点,否则结果有错!

发表于 2006-5-3 17:06:00 | 显示全部楼层

试试这个怎么样?

;;;;;判断一点是否在一个封闭的区域内,支持曲线(pline拟合、spline、圆、椭圆)

有用到的函数请到http://bbs.mjtd.com/forum.php?mod=viewthread&tid=49422下载

(defun inorout (ename pt / obj ptnear parm yspt1 yspt2 ang1 ang2)
  (setq obj    (vlax-ename->vla-object ename)
 ptnear (vlax-curve-getClosestPointTo obj pt)
  )
  (setq ang1  (angle ptnear pt)  
 parm  (vlax-curve-getParamAtPoint obj ptnear)
     yspt1 (vlax-curve-getFirstDeriv obj parm)
 yspt1 (list (+ (nth 0 ptnear) (nth 0 yspt1))
      (+ (nth 1 ptnear) (nth 1 yspt1))
      (nth 2 ptnear)
       )
 ang2  (angle ptnear yspt1)
 ang1  (- ang1 ang2)
  )
  (if (< ang1 0)
    (setq ang1 (+ (* 2 pi) ang1))
  )
    (if (PlineCCW_obj ename)  
    (if (< ang1 pi)
      t     
      nil    
    )
    (if (< ang1 pi)
      nil    
      t     
    )
  )
)

这个 函数有一个致命的出错之外,留给有心人去发现

发表于 2006-5-4 23:08:00 | 显示全部楼层

ptnear 在凸角的时候捕捉到的是端点

发表于 2006-5-5 16:17:00 | 显示全部楼层

当A,B,C三点成一线时,有可能出错

本帖子中包含更多资源

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

x
发表于 2006-5-8 19:46:00 | 显示全部楼层

多谢各位,待俺好好研究研究再来聆听高见……

发表于 2011-11-30 09:43:49 | 显示全部楼层
困扰好久了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-9 14:18 , Processed in 0.187057 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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