xxxl1233064 发表于 2014-6-9 19:56:20

如何判断一个封闭多线段在另一个封闭多线段内部?

怎么才能判断一个封闭的多线段在另外一个封闭多线段内部?如图,怎么判断封闭多线段A、B在封闭多线段C内部?

Andyhon 发表于 2014-6-9 20:29:19

依您之此例用面积比较如何

xxxl1233064 发表于 2014-6-9 21:02:27

Andyhon 发表于 2014-6-9 20:29 static/image/common/back.gif
依您之此例用面积比较如何

不明白怎么用面积比较

Andyhon 发表于 2014-6-9 21:31:39

check Area 命令 & Max 函数

邹锋 发表于 2014-6-9 21:36:28

可以用取点,然后用SSGET框选C内的,判断A名是否在SSGET内,再建个A的SSGET的,判断C是否是在 A内的SSGET中

小菜123 发表于 2014-6-9 23:05:22

两曲线没有交点,A上任一点在C内

香田里浪人 发表于 2014-6-10 06:09:13

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-10 08:22:55

本帖最后由 Student 于 2014-6-11 07:21 编辑

首先判断两个多边形A、B的大小,只有面积较大的A有可能完全包含较小的B。
想到2个比较笨的方法有:
1.将折线A、B闭合后,求有无交点。如果无交点,且B上任一节点在A内:A包含B
2.将A、B转换为面域,求并集的面积。如果并集面积=面积A:A包含B
可能还有更好的方法

风树 发表于 2014-6-10 11:36:23

可以搜索一下多边形判交的算法

xhq1954425 发表于 2014-6-10 11:37:33

1先求得各闭合多段线的面域(C面域、A面域、B面域)和面积(A面积、B面积)
2如果 C面域∩A面域 的面积=A面积 则 A闭合多段线在C闭合多段线内
3B同上
页: [1] 2 3
查看完整版本: 如何判断一个封闭多线段在另一个封闭多线段内部?