找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3094|回复: 52

[原创] 多段线点集最小包围盒

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-12-10 14:26:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
游客,如果您要查看本帖隐藏内容请回复

  1. ;;[功能] 点集包围盒--短边最短
  2. ;;(_EntmakeLWPOLYLINE (_BoxminB (_HH:GetLwPts (car (entsel)))))
  3. (defun _BoxminB (P / A ANG B C L P1 P2 S X)
  4.   (setq p1 p)
  5.   (setq p2 (cons (last p) p))
  6.   (while (setq a (car p1))
  7.     (setq p1 (cdr p1))
  8.     (setq b (car p2))
  9.     (setq p2 (cdr p2))
  10.     (setq ang (- (angle a b)))
  11.     (setq c (mapcar '(lambda (x) (rotate_pnt x a ang)) p))
  12.     (setq c (list
  13.                (apply 'mapcar (cons 'min c))
  14.                (apply 'mapcar (cons 'max c))
  15.              )
  16.     )
  17.     (setq c (_pnts:box c))
  18.     ;;最小面积
  19.     (setq s (min (distance (car c) (cadr c))
  20.                (distance (cadr c) (caddr c))
  21.             )
  22.     )
  23.     (setq c (mapcar '(lambda (x) (rotate_pnt x a (- ang))) c))
  24.     (setq L (cons (list s c) L))
  25.   )
  26.   (cadar (vl-sort L '(lambda(x y) (< (car x)(car y)))))
  27. )

  28. ;;[功能] 点集包围盒--最小面积
  29. ;;(_EntmakeLWPOLYLINE (_BoxminA (_HH:GetLwPts (car (entsel)))))
  30. (defun _BoxMinA (P / A ANG B C L P1 P2 S X)
  31.   (setq p1 p)
  32.   (setq p2 (cons (last p) p))
  33.   (while (setq a (car p1))
  34.     (setq p1 (cdr p1))
  35.     (setq b (car p2))
  36.     (setq p2 (cdr p2))
  37.     (setq ang (- (angle a b)))
  38.     (setq c (mapcar '(lambda (x) (rotate_pnt x a ang)) p))
  39.     (setq c (list
  40.               (apply 'mapcar (cons 'min c))
  41.               (apply 'mapcar (cons 'max c))
  42.             )
  43.     )
  44.     (setq c (_pnts:box c))
  45.     ;;最小面积
  46.     (setq s (* (distance (car c) (cadr c))
  47.                (distance (cadr c) (caddr c))
  48.             )
  49.     )
  50.     (setq c (mapcar '(lambda (x) (rotate_pnt x a (- ang))) c))
  51.     (setq L (cons (list s c) L))
  52.   )
  53.   (cadar (vl-sort L '(lambda (x y) (< (car x) (car y)))))
  54. )

  55. ;;[功能] 点集包围盒--最小周长
  56. ;;(_EntmakeLWPOLYLINE (_BoxminL (_HH:GetLwPts (car (entsel)))))
  57. (defun _BoxMinL (P / A ANG B C L P1 P2 S X)
  58.   (setq p1 p)
  59.   (setq p2 (cons (last p) p))
  60.   (while (setq a (car p1))
  61.     (setq p1 (cdr p1))
  62.     (setq b (car p2))
  63.     (setq p2 (cdr p2))
  64.     (setq ang (- (angle a b)))
  65.     (setq c (mapcar '(lambda (x) (rotate_pnt x a ang)) p))
  66.     (setq c (list
  67.               (apply 'mapcar (cons 'min c))
  68.               (apply 'mapcar (cons 'max c))
  69.             )
  70.     )
  71.     (setq c (_pnts:box c))
  72.     ;;最小面积
  73.     (setq s (+ (distance (car c) (cadr c))
  74.                (distance (cadr c) (caddr c))
  75.             )
  76.     )
  77.     (setq c (mapcar '(lambda (x) (rotate_pnt x a (- ang))) c))
  78.     (setq L (cons (list s c) L))
  79.   )
  80.   (cadar (vl-sort L '(lambda(x y) (< (car x)(car y)))))
  81. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-10 14:29:29 | 显示全部楼层
看看 黄总 的代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-10 14:46:44 | 显示全部楼层
是不是 做个 通用的 点集的 最小包围盒更好呢? 如果是多段线的话,求出顶点表,然后调用这个函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 812个

财富等级: 财运亨通

发表于 2017-12-10 16:55:36 | 显示全部楼层
感谢黄大侠的分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2017-12-10 18:20:48 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2017-12-10 19:29 编辑

后来我想了一下,以上方法并不严谨,还是要先凸包扫描。highflybird大师发的那个MinAreaRectangle确实难理解,我这个通俗些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2017-12-10 22:28:46 | 显示全部楼层
aeo,如果您要查看本帖隐藏内容请回复
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2017-12-10 23:00:34 | 显示全部楼层
c++代码在这里,需要转换成 arx
http://blog.csdn.net/mypsq/article/details/40076075

描述过程在这里 ,反正光看描述,是没法理解的
http://bbs.xdcad.net/thread-706965-1-1.html


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-12-10 23:28:50 | 显示全部楼层

用凸包,那不就是旋转卡壳法了嘛。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2017-12-11 00:01:58 | 显示全部楼层
回复看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 5592个

财富等级: 富甲天下

发表于 2017-12-11 08:41:34 | 显示全部楼层
感谢黄大侠的分享程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3186个

财富等级: 富可敌国

发表于 2017-12-11 08:54:03 | 显示全部楼层
谢谢,思路打开,好好学习天天向上
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2963个

财富等级: 家财万贯

发表于 2017-12-11 11:00:03 | 显示全部楼层
回复学习,学习分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8752个

财富等级: 富甲天下

发表于 2017-12-11 11:19:39 | 显示全部楼层
感谢分享学习!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-12-11 12:02:20 | 显示全部楼层
(list (apply 'mapcar (cons 'min pts)) (apply 'mapcar (cons 'max pts)))
跟这个有什么不同??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-11 12:11:47 | 显示全部楼层

点集最小包围盒,不一定是正交方向的矩形框

搜狗截图20171211121142.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-7 18:45 , Processed in 0.220527 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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