找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 971|回复: 5

[求助] [求助]:如何按y坐标分组?

[复制链接]
发表于 2007-10-2 08:42:43 | 显示全部楼层 |阅读模式

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

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

×
在得到了若干个点坐标后,我想把他们按y坐标相同的分成一个组,那位大虾帮个忙!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 7229个

财富等级: 富甲天下

发表于 2007-10-2 09:00:53 | 显示全部楼层
依y坐标排序
取出第一个'y坐标',排除非'y坐标'的串列
循环处理

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-10-2 15:41:41 | 显示全部楼层
表的操作,可以参照:http://zml84.blog.sohu.com/64522043.html

http://acad.net.cn/viewthread.php?tid=435&extra=page%3D1
这是一个选择集的排序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

 楼主| 发表于 2007-10-3 18:16:01 | 显示全部楼层
非常感谢各位!
我的意思是如何分组,当然排序也是一部分!
比如有100点,有n组y坐标相等,如何把各个点分好组,每组赋值给一个变量,然后返回!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-10-4 10:00:37 | 显示全部楼层
最初由 sfjlx 发布
[B]非常感谢各位!
我的意思是如何分组,当然排序也是一部分!
比如有100点,有n组y坐标相等,如何把各个点分好组,每组赋值给一个变量,然后返回! [/B]

看看以下如何?

  1.   [FONT=courier new]
  2. (defun test (pts /  lst ylst)
  3.   (setq pts (vl-sort pts '(lambda (e1 e2)
  4.                             (if (equal (cadr e1) (cadr e2) 1e-10)
  5.                               (> (car e1) (car e2))
  6.                               (> (cadr e1) (cadr e2))
  7.                             )
  8.                           )
  9.             )
  10.   )
  11.   (while (> (length pts) 0)
  12.     (setq lst (cons (setq ylst (th-assoc-y (cadar pts) pts))
  13.                     lst
  14.               )
  15.     )
  16.     (setq pts (txt-list-subtract pts ylst))
  17.   )
  18.   lst
  19. )
  20.   [/FONT]

子函数

  1.   [FONT=courier new]
  2. (defun th-assoc-y (key alst / i lst)
  3.   (while (setq i (vl-position key (mapcar
  4.                                     (function cadr)
  5.                                     alst
  6.                                   )
  7.                  )
  8.          )
  9.     (setq lst (cons (nth i alst) lst))
  10.     (setq alst (txt3-removenth i alst))
  11.   )
  12.   lst
  13. )
  14. (defun txt3-removenth (n lst / i)      ; 移除列表的第n项
  15.   (setq j -1)
  16.   (vl-remove-if '(lambda (x)
  17.                    (= n (setq j (1+ j)))
  18.                  ) lst
  19.   )
  20. )
  21. (defun txt-list-subtract (lst1 lst2 / lst);两表差集
  22.   (setq lst '())
  23.   (if lst1
  24.     (progn
  25.       (foreach tmp lst1
  26.         (if (not (member tmp lst2))
  27.           (setq lst (cons tmp lst))
  28.         )
  29.       )
  30.     )
  31.   )
  32.   (setq lst (reverse lst))
  33.   lst
  34. )

  35.   [/FONT]

测试:
命令: !lst
((2074.22 692.04 0.0) (2049.1 1414.48 0.0) (1520.49 1907.55 0.0) (798.047
1882.42 0.0) (304.973 1353.82 0.0) (330.101 631.376 0.0) (858.711 138.302 0.0)
(1581.15 163.43 0.0) (2074.22 692.04 0.0))

命令: (test lst)
(((858.711 138.302 0.0)) ((1581.15 163.43 0.0)) ((330.101 631.376 0.0))
((2074.22 692.04 0.0) (2074.22 692.04 0.0)) ((304.973 1353.82 0.0)) ((2049.1
1414.48 0.0)) ((798.047 1882.42 0.0)) ((1520.49 1907.55 0.0)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 04:34 , Processed in 0.193822 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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