XD::GEOM:LIST-EXTENTS
;; ------------------------------------------------------------------------
;;; 函数名称 / Function Name: XD::GEOM:LIST-EXTENTS
;;;
;;; 【功能说明 / Description】
;;; 计算点列表的边界范围,返回包含所有点的最小包围盒的两个对角点。
;;; 输入为二维或三维点列表,自动判断点维度,分别计算最小和最大坐标。
;;;
;;; 【参数说明 / Parameters】
;;; lst - (list) 点列表,每个点为二维或三维坐标列表,如 ( (x1 y1) (x2 y2) ... ) 或 ( (x1 y1 z1) (x2 y2 z2) ... )
;;;
;;; 【返回值 / Return Value】
;;; (list) 包含两个点的列表,分别为边界盒的左下角(最小坐标)和右上角(最大坐标)。
;;; 例如 ((xmin ymin ) (xmax ymax ))
;;;
;;; 【依赖函数 / Dependencies】
;;; - car, cadr, caddr : 访问点坐标分量
;;; - apply, min, max : 计算最小值和最大值
;;;
;;; 【使用示例 / Example Usage】
;;; (XD::GEOM:LIST-EXTENTS '((1 2) (3 4) (0 5)))
;;; => ((0 2) (3 5))
;;;
;;; (XD::GEOM:LIST-EXTENTS '((1 2 3) (3 4 5) (0 5 1)))
;;; => ((0 2 1) (3 5 5))
;;;
;;; 【备注 / Notes】
;;; - 如果点为二维,返回二维边界;如果为三维,返回三维边界。
;;; - 该函数适用于计算点云或图形对象的包围盒。
;;;
(defun XD::GEOM:LIST-EXTENTS (lst / lst1 lst2 lst3 a b c p1 p2)
;; 提取所有点的第1、2、3坐标分量列表
(setq lst1 (mapcar 'car lst))
(setq lst2 (mapcar 'cadr lst))
(setq lst3 (mapcar 'caddr lst))
(setq lst nil)
;; 判断是否存在第三维坐标(即三维点)
(if (apply 'and lst3)
(progn
;; 三维点,计算各坐标分量的最小值和最大值
(setq a (apply 'min lst1))
(setq b (apply 'min lst2))
(setq c (apply 'min lst3))
(setq p1 (list a b c))
(setq a (apply 'max lst1))
(setq b (apply 'max lst2))
(setq c (apply 'max lst3))
(setq p2 (list a b c))
)
(progn
;; 二维点,计算X和Y的最小值和最大值
(setq a (apply 'min lst1))
(setq b (apply 'min lst2))
(setq p1 (list a b))
(setq a (apply 'max lst1))
(setq b (apply 'max lst2))
(setq p2 (list a b))
)
)
;; 返回边界盒的两个对角点
(list p1 p2)
)
:o:loveliness::L
页:
[1]