找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 805|回复: 7

[求助] [求助]:如何对点表进行排序

[复制链接]
发表于 2004-3-15 08:47:57 | 显示全部楼层 |阅读模式

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

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

×
我有一点表,是一个矩形的四个顶点的表,PLIST((x1 ,y1)(x2,y2)(x3,y3)(x4,y4))

现要对PLIST按(左下角,右上角,左上角,右下角)进行排序,自己编了一个,总是出错,有时将所有的X坐标设置为同一个值,有时将所有的Y坐标设为同一个,有时竟将一个X坐标赋给了Y坐标,

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-15 09:03:11 | 显示全部楼层

Re: [求助]:如何对点表进行排序

最初由 xyzjint_cn 发布
[B]我有一点表,是一个矩形的四个顶点的表,PLIST((x1 ,y1)(x2,y2)(x3,y3)(x4,y4))

现要对PLIST按(左下角,右上角,左上角,右下角)进行排序,自己编了一个,总是出错,有时将所有的X坐标设置为同一个值,有时将?.. [/B]


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

使用道具 举报

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-3-15 11:29:25 | 显示全部楼层
就四个点呀:
(setq x (mapcar 'car PLIST) y (mapcar 'cadr PLIST))
(setq minx(apply 'min x) maxx(apply 'max x)
         miny(apply 'min y) maxy(apply 'max y) )
下面自己组合一下.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-15 15:53:14 | 显示全部楼层
试试这个:
(defun test (pp)
  (setq pp (vl-sort pp '(lambda (x1 x2) (< (car x1)(car x2)))))
  (setq p14 (vl-sort (list (car pp)(cadr pp)) '(lambda (x1 x2) (< (cadr x1)(cadr x2)))))
  (setq p23 (vl-sort (list (caddr pp)(last pp)) '(lambda (x1 x2) (> (cadr x1)(cadr x2)))))
  (list (car p14)(car p23)(cadr p14)(cadr p23))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-15 22:07:17 | 显示全部楼层
(setq xs (vl-sort (mapcar 'car ptlst) '<)
      ys (vl-sort (mapcar 'cadr ptlst) '<))
(list (list(car xs)(car ys)) (list (car xs)(cadr ys))(list (cadr xs)(cadr ys))(list (cadr xs)(car ys)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

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

使用道具 举报

发表于 2004-3-16 20:08:00 | 显示全部楼层
最初由 aeo 发布
[B]我看别人在问r14怎么办,
又不会写排序. [/B]


  1. 老lisp版的
  2. (defun #px-point1(pb / IN K N P0 P1 PB1 PB11 PB2 PB21 PT)
  3.   ;点表排序
  4.   (setq k(if(equal (car (nth 0 pb))(car (nth 1 pb)) 0.0001) 1 0 )
  5.         n(length pb) in 0 pb1'() pb2'())
  6.   (repeat n
  7.     (setq pt(nth in pb) in (1+ in))
  8.     (if pt
  9.       (setq pb1(cons (nth k pt) pb1)
  10.             pb2(append pb2 (list (cons (nth k pt) pt)))))
  11.   )
  12.   (setq pb11(lup pb1)n(length pb11)in 0
  13.         p0(car pb11)pb21(list (dxf p0 pb2)))
  14.   (repeat n
  15.     (setq p1(nth in pb11))
  16.     (if (equal p1 p0 0.0000001)
  17.       (setq in (1+ in))
  18.       (setq in (1+ in)
  19.             pb21(append pb21 (list (dxf p1 pb2)))
  20.             p0 p1)
  21.     )
  22.   )pb21
  23. )
  24. (defun dxf (#code #list)(cdr (assoc #code #list)))

  25. (defun lup(a / b mn mx);;;对一个数字表排序,重复的忽略
  26.   (setq mn (apply 'min a) mn (- mn 1000.))
  27.   (while (> (setq mx (apply 'max a)) mn)
  28.     (setq b (cons mx b) a (subst mn mx a))  )
  29.   b)


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 00:32 , Processed in 0.187196 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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