明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3655|回复: 19

[已解答] 【求助】环形排序 如何搞 ?

  [复制链接]
发表于 2014-7-23 11:29:29 | 显示全部楼层 |阅读模式
本帖最后由 wowan1314 于 2014-7-23 21:07 编辑

    想编个小程序。 突然发现 环形排序 弄不出!论坛搜索了半天没找到,可能隐藏太深,  特来求助!

上传图片中 画箭头 的是我想要的效果!  结果弄出来都是折返的。

我按自己的思路搞定了! 感谢各位热心回帖!

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-7-23 21:05:12 | 显示全部楼层
搞定了!
我按如下思路进行的处理!
1、先折返排序 点表0
2、取出 点表0 的首位点 ,以此点确定一个区间,取出此区间内的点表1  (区间大小应与折返排序一致)
3、继续取剩下的 点表0的首位点 ,再取出成点表2
如此循环,并且偶数的点表revese下,最后把 奇偶的点表合并!

写起来代码比较简单就不献丑了!  如有其它更好算法 , 请回帖告知!敬谢。

效果如下:

本帖子中包含更多资源

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

x

点评

定长的...没有通用性呀...  发表于 2014-7-24 10:34
看起来像最近点排序。  发表于 2014-7-24 08:17
发表于 2014-7-23 11:43:33 | 显示全部楼层
本帖最后由 langjs 于 2014-7-23 11:46 编辑

这个加上判断应该弄得出来啊。点表排序吗?好久不见

点评

加个什么样的判断呢?  发表于 2014-7-23 12:12
 楼主| 发表于 2014-7-23 11:56:51 | 显示全部楼层
本帖最后由 wowan1314 于 2014-7-23 11:58 编辑
langjs 发表于 2014-7-23 11:43
这个加上判断应该弄得出来啊。点表排序吗?好久不见

好久不见!  小弟愚钝啊! 想不明白咋弄!

难道是按区间分好 行或列 然后再按列或行 一正一反的排序? 感觉好麻烦啊!
而且区间不好确定啊!
发表于 2014-7-23 11:59:37 来自手机 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-7-23 12:04 编辑
wowan1314 发表于 2014-7-23 11:56
好久不见!  小弟愚钝啊! 想不明白咋弄!

难道是按区间分好 行或列 然后再按列或行 一正一反的排序? ...


你在开玩笑吧,还有你搞不定的
如果是多段线,你沿线就是你图示的样子。你想弄成什么效果
 楼主| 发表于 2014-7-23 12:10:43 | 显示全部楼层
自贡黄明儒 发表于 2014-7-23 11:59
你在开玩笑吧,还有你搞不定的
如果是多段线,你沿线就是你图示的样子。你想弄成什么效果

[em0] 本来就不擅长 编程!  你没搞过环形排序的问题? 没有多段线,单纯的点表排序!


1、先折返排序 点表0
2、取出首位点 ,以此点确定一个区间,取出此区间内的点表1
3、继续取剩下的 点表0的首位 ,再取出成点表2
如此循环,然后偶数的点表revese下,最后把 奇偶的点表合并!

看是否有更简单的方法!?
发表于 2014-7-23 12:16:51 | 显示全部楼层
自贡黄明儒 发表于 2014-7-23 11:59
你在开玩笑吧,还有你搞不定的
如果是多段线,你沿线就是你图示的样子。你想弄成什么效果

哈哈,
葛老收刀也有大大大大半年了吧
都生锈了呵

点评

本来就不快,更钝了! 呵呵  发表于 2014-7-23 13:22
发表于 2014-7-23 12:43:12 | 显示全部楼层
看不出来哪个是“环形排序”

点评

描述可能不准确! 所以才传了图片!  发表于 2014-7-23 13:07
发表于 2014-7-23 12:43:54 | 显示全部楼层
本帖最后由 xyp1964 于 2014-7-23 12:45 编辑

本帖子中包含更多资源

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

x
发表于 2014-7-23 13:32:30 | 显示全部楼层
编了一小段,上下来回折的点表排序好像是正确的,下面是测试程序
(defun c:tt (/ e1 e2 i lst lst1 pt)
  (setq lst '()        lst1 '())
  (while (setq pt (getpoint "\n点:"))
    (setq lst (cons pt lst))
  )
  (setq lst (vl-sort lst (function (lambda (e1 e2)(<= (cadr e1) (cadr e2)))))
        lst (vl-sort lst (function (lambda (e1 e2)(<= (car e1) (car e2)))))
        i 0
  )
  (repeat (length lst)
    (if (= (rem i 4) 0)
      (progn
        (if (nth (+ 1 i) lst)(setq lst1 (cons (nth (+ 1 i) lst) lst1)))
        (setq lst1 (cons (nth i lst) lst1))
        (if (nth (+ 2 i) lst)(setq lst1 (cons (nth (+ 2 i) lst) lst1)))
        (if (nth (+ 3 i) lst)(setq lst1 (cons (nth (+ 3 i) lst) lst1)))
      )
    )
    (setq i (1+ i))
  )
  (setq lst (reverse lst1))
  (entmake (append
             (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lst)))
             (mapcar'(lambda (pt) (cons 10 pt)) lst  )
           )
  )
  (princ)
)

点评

还是你实在啊! 不过测试不行! 我先把程序其他部分搞定,回头再研究研究这个东西  发表于 2014-7-23 13:43
发表于 2014-7-23 13:48:59 | 显示全部楼层
wowan1314 发表于 2014-7-23 12:10
本来就不擅长 编程!  你没搞过环形排序的问题? 没有多段线,单纯的点表排序!

我也只会用这个方法....所以只能应用于规格方阵....基本没有通用性.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 07:13 , Processed in 0.238582 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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