找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2551|回复: 11

[研讨] 【排序】“间苗”中的排序

[复制链接]

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-11-14 11:52:37 | 显示全部楼层 |阅读模式

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

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

×
各位好!
       前面发过一个帖子“关于点排序的误差值问题”,提出在设置误差时的排序错误,大家的结论是误差值设置太大,本帖是在此基础上的延伸,对这个问题进一步讨论。
      “间苗”是一个园林学的名词,是将苗木按一定行列距疏苗,以保证幼苗的出苗率。论坛也有个将地形图中标高数字等间疏的要求,应该说,这也是一种常规算法。
       考虑误差值排序,应该主要是考虑这种需要形成行列的情况,把某种误差范围内的内容归为一起,但误差值的使用,又有可能使得原本清晰的问题变得模糊。
       下图是单行间苗的示意,间距50cm间成100cm,按模糊排序使用误差值0.5是没问题的,但按排序后的结果“间苗”显然是不正确的。
131114.jpg
      排序的结果见引用的帖子。
      究其原因,还是排序的问题,从某种意义来说,排序是不该有误差值的,而排序后要进行的下一步(本例的“间苗”)应该有自己的算法,这里或许可以有误差值,但和排序不是一个问题。

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

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-11-16 07:55:13 来自手机 | 显示全部楼层
很有意思的题目,是不是可以这些,按行排序,然后行内按误差消,下一行要和上一行剩下的按误差消
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-11-16 08:16:29 | 显示全部楼层
我就一直没有明白长老的意思,是不是可以把你那张图贴上来我们看看,这样结合起来更好理解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-3 17:53:26 | 显示全部楼层
长老看看这个排序是不是应该这样
  1. (defun sortpts (pts fuzz / ptl p0)
  2.   (setq        pts (vl-sort pts
  3.                      '(lambda (p1 p2)
  4.                         (if (eq (car p1) (car p2))
  5.                           (< (cadr p1) (cadr p2))
  6.                           (< (car p1) (car p2))
  7.                         )
  8.                       )
  9.             ) ;_分行 x 方向
  10.   )
  11.   (setq ptl (list (list (car pts))))
  12.   (while (setq pts (cdr pts))
  13.     (setq p0 (car pts))
  14.     (if        (equal (cadr p0) (cadr (last (car ptl))) fuzz)
  15.       (setq ptl (cons (cons p0 (car ptl)) (cdr ptl)))
  16.       (setq ptl (cons (list p0) ptl))
  17.     )
  18.   ) ;_按精度处理 y 向,分成一条条带状
  19.   (mapcar '(lambda (x)
  20.              (vl-sort x
  21.                       '(lambda (x1 x2)
  22.                          (if (equal (car x1) (car x2))
  23.                            (< (cadr x1) (cadr x1))
  24.                            (< (car x1) (car x1))
  25.                          ) ;_每个带状之内再次排序
  26.                        )
  27.              )
  28.            )
  29.           ptl
  30.   )
  31. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

 楼主| 发表于 2013-12-3 22:05:08 | 显示全部楼层
st788796 发表于 2013-12-3 17:53
长老看看这个排序是不是应该这样

现在不太想这个问题了,以后遇到再说了。
附图的“间苗”,只是一行的问题,因为排序的问题,所以间苗有错误,如果是面上的间苗,就更复杂了,曾经有一个帖子,是解决地形图中高程点太多太密的问题,就类似间苗,最后的解决方法好像是画网格,最后每个网格保留一个,问题算是解决了。但从理论上来说,这不是最优的,最优的平面“间苗”应该是近似等边三角形分布,这就不是一句话两句话说得清的了。
总之,就事论事要容易一些,上升到理论就难一点,我这个问题是因为函数发布而提出来的,只是因为我认为发布的函数应该更严谨。

点评

理论上不懂,最近写排序,还看了关于分治的几篇文章,对 Autolisp 中的 Equal 点是这样的  详情 回复 发表于 2013-12-4 10:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-4 10:30:15 | 显示全部楼层
ll_j 发表于 2013-12-3 22:05
现在不太想这个问题了,以后遇到再说了。
附图的“间苗”,只是一行的问题,因为排序的问题,所以间苗有 ...

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

 楼主| 发表于 2013-12-4 10:51:57 | 显示全部楼层
st788796 发表于 2013-12-4 10:30
理论上不懂,最近写排序,还看了关于分治的几篇文章,对 Autolisp 中的 Equal 点是这样的

最“经济”的间苗应该是这样
1111.jpg
这个情况算法要比正方形复杂的多,所以不敢多想了。

点评

看过 高飞鸟的一个帖子分区、分治算法,这个应用应该也可以,先按行排序(没有误差),然后根据 Y 向划分出第一条带状区域,在这个带状区域用最左下点 p 作基点,按距离找点 p1 ,换基点为 p1 , 循环下去 。。。(处  详情 回复 发表于 2013-12-4 11:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-4 11:09:00 | 显示全部楼层
ll_j 发表于 2013-12-4 10:51
最“经济”的间苗应该是这样

这个情况算法要比正方形复杂的多,所以不敢多想了。

看过 高飞鸟的一个帖子分区、分治算法,这个应用应该也可以,先按行排序(没有误差),然后根据 Y 向划分出第一条带状区域,在这个带状区域用最左下点 p 作基点,按距离找点 p1 ,换基点为 p1 , 循环下去 。。。(处理完后按 X Y 排序), 然后在该带状中 Y 靠上,满足间隔的点作基准构造上一个带状区域,直至循环完成


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

使用道具 举报

已领礼包: 3884个

财富等级: 富可敌国

发表于 2013-12-4 12:36:19 | 显示全部楼层
我觉得楼主的例子和排序中使用误差,是完全不相干的事。如果楼主非要用这个例子来排序,那楼主也得先考虑四舍五入。也就是说,0.5和1.0在0.5误差的范围内都是1.0,那么排序的结果就是唯一确定的,也就是楼主图示的那个正确的结果。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 09:10 , Processed in 0.211090 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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