明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13433|回复: 59

[讨论] 研究过最大包围框的,请进

    [复制链接]
发表于 2014-5-11 13:57 | 显示全部楼层 |阅读模式
如图,


任意框选品红色线两个对角点,得到里面三个选择集的最大包围框,是得到三个包围框哦,
有什么方法或者思路吗

本帖子中包含更多资源

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

x

点评

应该是最小包围盒  发表于 2014-5-11 20:27
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-4-18 18:33 | 显示全部楼层
;;;感谢lostbalance与作者,原帖: http://bbs.mjtd.com/thread-178146-1-1.html
  (defun intersect (a b)
        (if
            (or
                (and ;;b左下角在a框内
                    (<= (caar a) (caar b) (caadr a))
                    (<= (cadar a) (cadar b) (cadadr a))
                )
                (and ;;b左上角在a框内
                    (<= (caar a) (caar b) (caadr a))
                    (<= (cadar a) (cadadr b) (cadadr a))
                )
                (and ;;b右上角在a框内
                    (<= (caar a) (caadr b) (caadr a))
                    (<= (cadar a) (cadadr b) (cadadr a))
                )
                (and ;;b右下角在a框内
                    (<= (caar a) (caadr b) (caadr a))
                    (<= (cadar a) (cadar b) (cadadr a))
                )
                (and ;;a框部分包含在b框内
                    (<= (caar a) (caar b) (caadr a)) ;;xa1<=xb1<=xa2
                    (>= (cadar a) (cadar b)) ;;ya1>=yb1
                    (<= (cadadr a) (cadadr b)) ;;ya2<=yb2
                )
            )
            (list
                (apply 'mapcar (cons 'min (append a b)))
                (apply 'mapcar (cons 'max (append a b)))
            )
        )
    )
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-8-20 00:48 | 显示全部楼层
本帖最后由 邹锋 于 2014-8-25 22:01 编辑
Jack_PC 发表于 2014-8-19 22:39
都这么久的贴了,希望知道的出来说说程序的原理


求出每 一个实体的最小包围框的角点,然后每个点与点表循环判断是不是在别的对角点表内,


BOX是求一个实体的最小包围框函数,对SPLINE很有用
intersect 函数是判断每两个包围框的角点,判断第一个A的两个角点是在那个包围框内还是外,如果在外,则不返回,如果要交就返回这两个中的最小点与最大点



rectang 函数是生成一个最小框,

它如果是这样的图形,会出现错误的话,我再加一组判断就行了




  (defun intersect (a b)
    (if
      (or
        (and
          (<= (caar a) (caar b) (caadr a))
          (<= (cadar a) (cadar b) (cadadr a))
        ) ;_ 结束and
        (and
          (<= (caar a) (caar b) (caadr a))
          (<= (cadar a) (cadadr b) (cadadr a))
        ) ;_ 结束and
        (and
          (<= (caar a) (caadr b) (caadr a))
          (<= (cadar a) (cadadr b) (cadadr a))
        ) ;_ 结束and
        (and
          (<= (caar a) (caadr b) (caadr a))
          (<= (cadar a) (cadar b) (cadadr a))
        ) ;_ 结束and
       
        (and
          (<= (caar a) (caar b))
          (>= (caadr a) (caar b))
          (<= (caadr a) (cadadr b))
          (>= (cadar a) (cadar b))
          (<= (cadadr a) (cadadr b))          
        ) ;_ 结束and


      ) ;_ 结束or
       (list
         (apply 'mapcar (cons 'min (append a b)))
         (apply 'mapcar (cons 'max (append a b)))
       ) ;_ 结束list
    ) ;_ 结束if
  ) ;_ 结束defun

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2014-5-11 14:09 | 显示全部楼层
;; 先建图块后处理

本帖子中包含更多资源

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

x

点评

能具体讲解下吗  发表于 2014-5-11 18:50
你的图片中的程序基本实现了,你理解了,但就是不知其中的原理  发表于 2014-5-11 16:09
 楼主| 发表于 2014-5-11 14:24 | 显示全部楼层
xyp1964 发表于 2014-5-11 14:09
;; 先建图块后处理

我就是不知道怎么得到三个选择集,有选择集后就好办了
发表于 2014-5-11 14:27 | 显示全部楼层
想先知道您的XY图标基点可用来作为分割的参考吗?

点评

不可以的,因为有时我只有左边两个,或者上面排两个  发表于 2014-5-11 14:39
发表于 2014-5-11 14:34 | 显示全部楼层
人为先作块吧

点评

人为想作块我还不如直接量出来了,我只是想得到三个最大包围框的大小  发表于 2014-5-11 14:41
发表于 2014-5-11 14:56 | 显示全部楼层
选择集a,第一个图元外框ssget(外框四点点集)循环,循环前循环后图元数相同形成一个集,重新开始一个图元外框……,直到集长度为 0

评分

参与人数 1明经币 +1 收起 理由
lsjj + 1 赞一个!意思到了

查看全部评分

发表于 2014-5-11 15:16 | 显示全部楼层
有个思路。就是把所有的图元全部建立一个一个: 包围框==接着把所有的全部焊接=最后就得出这三个最大包容盒子了。准备写这个。还没开始。希望楼主能分享,谢谢。

点评

直线的包容盒子基本是直线  发表于 2014-5-11 20:12
没有,我想不到,我  发表于 2014-5-11 16:04
发表于 2014-5-11 15:19 | 显示全部楼层
只是图元不要碰到一起了。
发表于 2014-5-11 17:15 | 显示全部楼层
434939575 发表于 2014-5-11 15:16
有个思路。就是把所有的图元全部建立一个一个: 包围框==接着把所有的全部焊接=最后就得出这三个最大包容盒子 ...

我j讲的焊接:先变;REGION>UNION

点评

不懂你的意思,要是懂你的意思我就可以写出来了了  发表于 2014-5-11 17:26
发表于 2014-5-11 18:48 | 显示全部楼层
这个跟批量打印遇到的问题差不多啊

点评

它是已经做成块的或者图框或者是长方形了  发表于 2014-5-11 19:13
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 05:22 , Processed in 0.222798 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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