明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 616|回复: 0

[源码] 利用面积法求点表凸包

[复制链接]
发表于 2021-7-16 13:03 | 显示全部楼层 |阅读模式
  1. (defun convex-area (ptlst)
  2.   (setq        cenpt (mapcar '*
  3.                       '(0.5 0.5)
  4.                       (mapcar '+
  5.                               (apply 'mapcar (cons 'min ptlst))
  6.                               (apply 'mapcar (cons 'max ptlst))
  7.                       )
  8.               )
  9.   )
  10.   (setq
  11.     ptlst (vl-sort ptlst
  12.                    '(lambda (a b) (< (angle cenpt a) (angle cenpt b)))
  13.           )
  14.   )
  15.   (setq
  16.     f (lambda (lst)
  17.         (abs
  18.           (apply
  19.             '+
  20.             (mapcar '(lambda (x y)
  21.                        (* (- (car y) (car x)) (+ (cadr x) (cadr y)))
  22.                      )
  23.                     lst
  24.                     (append (cdr lst) (list (car lst)))
  25.             )
  26.           )
  27.         )
  28.       )
  29.   )
  30.   (setq area (f ptlst))
  31.   (setq        ptlst (vl-remove-if
  32.                 '(lambda (x) (> (f (vl-remove x ptlst)) area))
  33.                 ptlst
  34.               )
  35.   )
  36. )
  37. (defun c:tt ()
  38.   (setq        ss    (ssget)
  39.         n     -1
  40.         ptlst '()
  41.   )
  42.   (while (setq ent (ssname ss (setq n (1+ n))))
  43.     (setq ptlst (cons (cdr (assoc 10 (entget ent))) ptlst))
  44.   )
  45.   (while (not (= (length (setq ptlst (convex-area ptlst)))
  46.                  (length (setq ptlst (convex-area ptlst)))
  47.               )
  48.          )
  49.   )
  50.   (entmake (append (list '(0 . "LWPOLYLINE")
  51.                          '(100 . "AcDbEntity")
  52.                          '(100 . "AcDbPolyline")
  53.                          (cons 90 (length ptlst))
  54.                          '(70 . 1)
  55.                    )
  56.                    (mapcar '(lambda (pt) (cons 10 pt)) ptlst)
  57.            )
  58.   )
  59.   (princ)
  60. )

评分

参与人数 4明经币 +4 收起 理由
USER2128 + 1 赞一个!
guosheyang + 1 很给力!
Bao_lai + 1 很给力!
tryhi + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 01:12 , Processed in 0.170080 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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