如何判断一个封闭多线段在另一个封闭多线段内部?
怎么才能判断一个封闭的多线段在另外一个封闭多线段内部?如图,怎么判断封闭多线段A、B在封闭多线段C内部? 依您之此例用面积比较如何 Andyhon 发表于 2014-6-9 20:29 static/image/common/back.gif依您之此例用面积比较如何
不明白怎么用面积比较 check Area 命令 & Max 函数 可以用取点,然后用SSGET框选C内的,判断A名是否在SSGET内,再建个A的SSGET的,判断C是否是在 A内的SSGET中 两曲线没有交点,A上任一点在C内 xxxl1233064 发表于 2014-6-9 21:02 static/image/common/back.gif
不明白怎么用面积比较
***本程序为求封闭的大物体与其包含的多个封闭小物体的面积之差****
(defun c:mjc ()
(princ "\n ****本程序为求封闭的大物体与其包含的多个封闭小物体的面积之差****")
(princ "\n 请选择封闭物体(圆、多边形)....")
(command "layer" "M" "面积标注" "C" "4" "" "LT" "CONTINUOUS" "" "");设置一个标注图层
(setvar"dimzin"0);;保留小数位数时如果位数不足可以补零
(setq ss (ssget '((0 . "CIRCLE,LWPOLYLINE"))))
(setq i 0
lis '()
)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq obj (vlax-ename->vla-object ent))
(setq s (list (vla-get-Area obj)))
(setq lis (append s lis))
(setq i (1+ i))
)
(setq lis (vl-sort lis '>))
(setq es (eval (cons '- lis)))
(command "_.TEXT" PAUSE "" "" (strcat "大面积 = " (rtos (car lis) 2 2)"㎡"))
(foreach x (cdr lis) (command "_.TEXT" "" (strcat "内部面积=" (rtos x 2 2)"㎡")))
(command "_.TEXT" "" (strcat "面积差 = " (rtos es 2 2)"㎡"))
(princ)
) 本帖最后由 Student 于 2014-6-11 07:21 编辑
首先判断两个多边形A、B的大小,只有面积较大的A有可能完全包含较小的B。
想到2个比较笨的方法有:
1.将折线A、B闭合后,求有无交点。如果无交点,且B上任一节点在A内:A包含B
2.将A、B转换为面域,求并集的面积。如果并集面积=面积A:A包含B
可能还有更好的方法 可以搜索一下多边形判交的算法 1先求得各闭合多段线的面域(C面域、A面域、B面域)和面积(A面积、B面积)
2如果 C面域∩A面域 的面积=A面积 则 A闭合多段线在C闭合多段线内
3B同上