明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: highflybir

[【高飞鸟】] 【越飞越高讲堂12】最小包围盒和最大距离点对

    [复制链接]
发表于 2013-5-9 17:56 | 显示全部楼层
楼主讲的透彻。
发表于 2013-5-9 23:54 | 显示全部楼层
Mark,论坛为什么没有收藏功能。。。
发表于 2013-8-12 12:03 | 显示全部楼层
谢谢高飞鸟无私的分享与精细的讲解
发表于 2013-8-14 22:33 | 显示全部楼层
受益匪浅,努力学习
发表于 2013-11-2 08:03 | 显示全部楼层
非常感谢这样无私高手!!!祝家庭幸福!!!
发表于 2014-4-5 20:25 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-4-5 20:29 编辑

有外就有内,那最大内接正方形该怎么求?
发表于 2014-11-14 15:33 | 显示全部楼层
highflybir 发表于 2010-6-4 23:24
在上篇帖子中我已经说明了这个算法的大致思想。下面我贴出源码,具体算法我要强调的一点是:
我构造了一个循 ...

正在研读你指引给我的这个链接。
前段时间之所以关心素数,觉得让使用者输入200~2000有点不知所措,故改成如下
  1. ;;;The procedure for Test
  2. (defun C:w1 (/ AREA1 AREA2 LST N PP PTLIST SCORE SEL T0 X)
  3.   (princ "\nPlease select LWPOLYLINE,LINE,SPLINE,POINT")
  4.   (cond
  5.     ((setq
  6.        sel (ssget (list '(0 . "POINT,LWPOLYLINE,LINE,SPLINE,ARC,CIRCLE,ELLIPSE")))
  7.      )
  8.      (initget 7)
  9.      (setq n (getint "\n精度:"))
  10.      (setq t0 (getvar "TDUSRTIMER"))          ;The start time of this algorithm
  11.      (setq lst (Sprime2 200 2000))          ;素数
  12.      (setq area1 0)
  13.      (while (and (setq x (car lst)) (not (equal area1 area2 n)))
  14.        (setq area2 area1)
  15.        (setq ptlist (Graham-scan (getpt sel x)))      ;construct the CCW Hull of this set.
  16.        ;|;扫描后的点本身就逆时针(sort-by-angle-distance),下面一句好象没有什么用处。
  17.    (if (<= (det (car ptlist) (cadr ptlist) (caddr ptlist)) 0.0)
  18.                   ;ensure the hull is CCW.
  19.      (setq ptlist (reverse ptlist))        ;if it isn't CCW,then reverse it
  20.    )|;
  21.        (setq score (MinAreaRectangle ptlist))
  22.        (setq area1 (cdr score))
  23.        (setq lst (cdr lst))
  24.      )     
  25.      (princ "\nIt takes :")
  26.      (princ (* (- (getvar "TDUSRTIMER") t0) 86400))      ;The End time
  27.      (princ "seconds")
  28.      (if (setq pp (car score))            ;start calculating
  29.        (make-poly pp)              ;draw rectangle.
  30.      )
  31.     )
  32.   )
  33.   (princ)
  34. )
  35. ;;[功能] 小于n的质数
  36. ;;(SPrime 100)=>(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97)
  37. (defun Sprime (n / I K L LST ROOT)  
  38.   (setq i 1)
  39.   (setq root (sqrt n))
  40.   (while (<= (setq i (+ i 2)) n) (setq l (cons i l)))
  41.   (setq l (reverse l))
  42.   (while (and (setq k (car l)) (<= k root))
  43.     (setq l (vl-remove-if '(lambda (x) (= (rem x k) 0)) (cdr l)))
  44.     (setq lst (cons k lst))
  45.   )
  46.   (append '(2) (reverse lst) l)  
  47. )
  48. ;;[功能] n1 n2之间的质数
  49. ;;(Sprime 200 2000)
  50. (defun Sprime2 (n1 n2 / LST)
  51.   (setq lst (Sprime n2))
  52.   (vl-remove-if '(lambda (x) (< x n1)) lst)
  53. )
发表于 2014-12-16 11:09 | 显示全部楼层

太强了~~
发表于 2014-12-17 20:45 来自手机 | 显示全部楼层
vlisp2012 发表于 2013-4-1 19:48
想要批量实现任意四边形和三角形的最小包围盒,没成功。
哪位大师,帮一下忙!

这个扫锚程序很强大,用处多,加上最近的取点函数,就可对任意曲线求最小包围盒了
发表于 2014-12-19 11:12 | 显示全部楼层
highflybir 发表于 2010-6-4 23:24
在上篇帖子中我已经说明了这个算法的大致思想。下面我贴出源码,具体算法我要强调的一点是:
我构造了一个循 ...

(setq INF 1e309)
放在win7 编译后的lisp中,不认识,我改成(setq INF 1e200)就对了。是什么原因?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 21:20 , Processed in 0.240204 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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