llsheng_73 发表于 2014-1-3 14:20:44

如果不允许共线包含就简单,按老黄坐在沙发上指点的就没问题了
如果允许部分共线包含,那就比较麻烦,因为共线部分会产生交点
      如果一条多线段a在另一条多线段b内,不管它们是否有部分共线,首先必定其面积比b小,另外a的顶点不会在b构成的封闭区域外,在有凸度的情况下,这样还不足以说明问题,所以得找出它们的交点来进一步确定,如果有不在a本来的顶点中的交点出现,那就可以断定a与b相交,不然就不会产生出不在a的顶点表内的交点

llsheng_73 发表于 2014-1-3 14:24:46

自贡黄明儒 发表于 2013-12-28 20:02 static/image/common/back.gif
看有无交点。无交点分两种情况:在外在内,取其一点来断判,只要有一点

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

312735894 发表于 2014-1-3 18:29:54

llsheng_73 发表于 2014-1-3 14:24 static/image/common/back.gif
如果允许部分共线包含,有交点也不一定代表它们相交

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

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

liu_kunlun 发表于 2014-1-3 19:41:46

本帖最后由 liu_kunlun 于 2014-1-3 19:48 编辑

如果共面,可以分别生成面域,作差集,看面积变化情况。等于面积相减,在内;面积不变,在外;其它,相交。(如果被减面域消失,表明作差集成功,2面域共面)

重慶崽兒 发表于 2014-1-25 22:02:54

edata 发表于 2013-12-28 21:24 static/image/common/back.gif
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=67738
http://bbs.mjtd.com/forum.php?mod=viewthre ...

edata大大,这个程序的有句话没懂,还请您给解答下:
(reverse (cdr (reverse (cons (last POINTS) POINTS)))
这里为什么要对顶点坐标进行这样的处理啊,没懂是怎么回事,程序的算法没明白....

edata 发表于 2014-1-26 00:26:36

(reverse (cdr (reverse (cons (last POINTS) POINTS)))
)
只说这句的含义。这个函数不是 我写的,没深入研究。
这句是将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)
至于整个函数的算法,需要深入研究。
有时候我看代码,一眼过,如果不需要,不研究算法。
页: 1 [2]
查看完整版本: 怎么判定一条封闭多段线在另一条封闭多段线内啊?请大神给个思路!