明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[已解答] 怎么判定一条封闭多段线在另一条封闭多段线内啊?请大神给个思路!

[复制链接]
发表于 2014-1-3 14:20 | 显示全部楼层
如果不允许共线包含就简单,按老黄坐在沙发上指点的就没问题了
如果允许部分共线包含,那就比较麻烦,因为共线部分会产生交点
      如果一条多线段a在另一条多线段b内,不管它们是否有部分共线,首先必定其面积比b小,另外a的顶点不会在b构成的封闭区域外,在有凸度的情况下,这样还不足以说明问题,所以得找出它们的交点来进一步确定,如果有不在a本来的顶点中的交点出现,那就可以断定a与b相交,不然就不会产生出不在a的顶点表内的交点
发表于 2014-1-3 14:24 | 显示全部楼层
自贡黄明儒 发表于 2013-12-28 20:02
看有无交点。无交点分两种情况:在外在内,取其一点来断判,只要有一点

如果允许部分共线包含,有交点也不一定代表它们相交

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-1-3 18:29 | 显示全部楼层
llsheng_73 发表于 2014-1-3 14:24
如果允许部分共线包含,有交点也不一定代表它们相交

谢谢老师解答,共线包含是不会出现的,有我都会手动处理,要么就是全部包含在里面
要么就是会出现这种情况:


还有就是取其一点来判定是否在里面,怎么判断啊,老师能不能随意写两句代码,让小弟看看其中的思路,涉及到那些函数!

本帖子中包含更多资源

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

x
发表于 2014-1-3 19:41 | 显示全部楼层
本帖最后由 liu_kunlun 于 2014-1-3 19:48 编辑

如果共面,可以分别生成面域,作差集,看面积变化情况。等于面积相减,在内;面积不变,在外;其它,相交。(如果被减面域消失,表明作差集成功,2面域共面)
发表于 2014-1-25 22:02 | 显示全部楼层
edata 发表于 2013-12-28 21:24
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=67738
http://bbs.mjtd.com/forum.php?mod=viewthre ...

edata大大,这个程序的有句话没懂,还请您给解答下:
  1. (reverse (cdr (reverse (cons (last POINTS) POINTS)))

这里为什么要对顶点坐标进行这样的处理啊,没懂是怎么回事,程序的算法没明白....
发表于 2014-1-26 00:26 | 显示全部楼层
  1. (reverse (cdr (reverse (cons (last POINTS) POINTS)))
  2. )

只说这句的含义。这个函数不是 我写的,没深入研究。
这句是将points的最后一个点换到第一个位置来,比如points是(1 2 3 4)转换后是(4 1 2 3)
你可以讲这样的嵌套语句一句一句的解读
这句从最里层的括号开始
(last points) 取出最后一个元素 本例解读 = 4
(cons 4 points) 将 4插入points表中 => (4 1 2 3 4)
(reverse '(4 1 2 3 4))       ==> (4 3 2 1 4)
(cdr (4 3 2 1 4))    ==> (3 2 1 4)
(reverse '(3 2 1 4))    ==> (4 1 2 3)
至于整个函数的算法,需要深入研究。
有时候我看代码,一眼过,如果不需要,不研究算法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 03:43 , Processed in 0.167270 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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