研究过最大包围框的,请进
如图,任意框选品红色线两个对角点,得到里面三个选择集的最大包围框,是得到三个包围框哦,
有什么方法或者思路吗
;;;感谢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)))
)
)
) 本帖最后由 邹锋 于 2014-8-25 22:01 编辑
Jack_PC 发表于 2014-8-19 22:39 static/image/common/back.gif
都这么久的贴了,希望知道的出来说说程序的原理
求出每 一个实体的最小包围框的角点,然后每个点与点表循环判断是不是在别的对角点表内,
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 ;; 先建图块后处理
xyp1964 发表于 2014-5-11 14:09 static/image/common/back.gif
;; 先建图块后处理
我就是不知道怎么得到三个选择集,有选择集后就好办了 想先知道您的XY图标基点可用来作为分割的参考吗? 人为先作块吧 选择集a,第一个图元外框ssget(外框四点点集)循环,循环前循环后图元数相同形成一个集,重新开始一个图元外框……,直到集长度为 0 有个思路。就是把所有的图元全部建立一个一个: 包围框==接着把所有的全部焊接=最后就得出这三个最大包容盒子了。准备写这个。还没开始。希望楼主能分享,谢谢。 只是图元不要碰到一起了。 434939575 发表于 2014-5-11 15:16 static/image/common/back.gif
有个思路。就是把所有的图元全部建立一个一个: 包围框==接着把所有的全部焊接=最后就得出这三个最大包容盒子 ...
我j讲的焊接:先变;REGION>UNION 这个跟批量打印遇到的问题差不多啊