找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1723|回复: 4

[LISP程序]:求点集中 x 最小 y 最小

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-9-21 12:28:38 | 显示全部楼层 |阅读模式

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

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

×

  1. ;; Form [url]www.xdcad.net[/url] eachy 2005.9.21
  2. ;;求点集中 x 最小 y 最小
  3. (defun xd-Points_Minx_MinY (pts)
  4.   (car (vl-sort        pts
  5.                 '(lambda (e1 e2)
  6.                    (if (equal (car e1) (car e2) 1e-10)
  7.                      (< (cadr e1) (cadr e2))
  8.                      (< (car e1) (car e2))
  9.                    )
  10.                  )
  11.        )
  12.   )
  13. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-22 21:24:14 | 显示全部楼层

  1. ;; 求点集中x,y,z最小-----狂刀。借花献佛 。2005.9
  2. (defun xd-minxyz (pts)
  3.   (apply 'mapcar (cons 'min pts))
  4. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-9-22 23:26:14 | 显示全部楼层
2 楼函数返回值可能是一个新元素,非点集内元素
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-4 22:12:18 | 显示全部楼层

Re: [LISP程序]:求点集中 x 最小 y 最小

最初由 eachy 发布
[B][CODE]
;; Form www.xdcad.net eachy 2005.9.21
;;求点集中 x 最小 y 最小
(defun xd-Points_Minx_MinY (pts)
  (car (vl-sort        pts
                '(lambda (e1 e2)
                   (if (equal (car e1) (car e2) 1e-10)
... [/B]

测试:
命令: !a ((905.476 69.521) (901.521 53.8912) (886.278 45.4492) (872.366 51.1843))
命令: (xd-Points_Minx_MinY a)
(872.366 51.1843)
命令: !a ((1 -1) (1 0) (905.476 69.521) (901.521 53.8912) (886.278 45.4492) (872.366 51.1843))
命令: (xd-Points_Minx_MinY a)
(1 -1)

从结果上看,只能说是求x最小(x优先).其次是y最小

依葫芦画瓢,
[PHP]
(defun xd-Points_Maxx_MaxY (pts)
  (car (vl-sort        pts
                '(lambda (e1 e2)
                   (if (equal (car e1) (car e2) 1e-10)
                     (> (cadr e1) (cadr e2))
                     (> (car e1) (car e2))
                   )
                 )
       )
  )
)

[/PHP]
同样是Xmax优先,其次是Ymax
测试:

!a((10000 200) (10000 200) (1 -1) (1 0) (905.476 69.521) (901.521 53.8912) (886.278 45.4492) (872.366 51.1843))
命令: (xd-Points_Maxx_MaxY a)
(10000 200)

命令: !a ((10000 10000) (10000 200) (10000 200) (1 -1) (1 0) (905.476 69.521) (901.521 53.8912) (886.278 45.4492) (872.366 51.1843))
命令: (xd-Points_Maxx_MaxY a)
(10000 10000)

[PHP](defun xd-Points_MinY_Minx (pts);y優先於x
  (car (vl-sort        pts
                '(lambda (e1 e2)
                   (if (equal (cadr e1) (cadr e2) 1e-10)
                     (< (car e1) (car e2))
                     (< (cadr e1) (cadr e2))
                   )
                 )
       )
  )
)

(defun xd-Points_MaxY_Maxx (pts);y優先於x
  (car (vl-sort        pts
                '(lambda (e1 e2)
                   (if (equal (cadr e1) (cadr e2) 1e-10)
                     (> (car e1) (car e2))
                     (> (cadr e1) (cadr e2))
                   )
                 )
       )
  )
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-5-30 13:27:19 | 显示全部楼层
我再来发一个!看看效果如何啊!
可为xyz的任意组合.试下!
[php]
(defun Plst_id_> (pts n)
  (vl-sort pts
           '(lambda (a b)
              (> (nth n a) (nth n b))
            )
  )
)
(defun sort-pt-id (plst xyz)
  (setq        xyz (mapcar '(lambda (a) (- a 120))
                    (vl-string->list (strcase xyz T))
            )
  )
  (foreach n-xyz (reverse xyz)
    (setq Plst (plst_id_> plst n-xyz))
  )
)
[/php]
以下相当于各位写的程式:
[php]
;;优先级别:x
(car (sort-pt-id plst "x"))
;;优先级别:x>y
(car (sort-pt-id plst "xy"))
;;优先级别:y>x
(car (sort-pt-id plst "yx"))
;;优先级别x>y>z
(car (sort-pt-id plst "xyz"))
;;优先级别z>y>x
(car (sort-pt-id plst "zyx"))
[/php]
写了这么多了有了灵感这个功能本可以更强大的哦
不如发个新贴算了啦!见:功能全面的通用点表排序函数!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 00:44 , Processed in 0.318513 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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