明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1220|回复: 5

如何将坐标类似的多个实体进行分类

[复制链接]
发表于 2012-12-9 22:01:29 | 显示全部楼层 |阅读模式
比如坐标(15,11)附近有4个文字,坐标(25,19)附近也有4个文字。。。。。,我想将坐标(15,11)附近的4个文字归入一个选择集,(25,19)附近4个文字也归入一个选择集,以此类推,将坐标相似的文字单独归入一个选择集,我原来的算法是(setq ent_lst (vl-sort ent_lst '(lambda(e1 e2 ) (< (distance (cdr (assoc 10 (entget (car ent_lst )))) (cdr(assoc 10 (entget   e1 ))))
                        (distance (cdr(assoc 10 (entget (car ent_lst ))))(cdr (assoc 10 (entget   e2))))))))

即将所有文字按相互距离的长短进行排序,然后按4个一组、4个一组将文字赋值到每一个表中,这个方法有两个缺点:
1、算法很慢,3000多个文字,排序差不多要花7、8min(和电脑也有关系),但总体来说还是很费时。
2、如果这些坐标类似的文字数目不一样,比如(15,11)附近有4个文字,但是坐标(25,19)只有3个文字,那又要增加一大段判断语句对排序后的ent_lst的物体重新分类。
不知道大家是否有好的算法,帮我出出注意,谢谢。
发表于 2012-12-9 23:24:35 | 显示全部楼层

RE: 如何将坐标类似的多个实体进行分类

坐标之间设置一个临近长度,与第一点的临近点同第一点构成第一个子表,同时将第一个子表的点从原表删除,以此类推。
发表于 2012-12-10 08:21:30 | 显示全部楼层
不要把所有的事情都放在一步做。
楼主在每一步中都对每个实体进行全部的计算,当然慢,你可以把这些过程分开,先构成包含实体名和坐标(或距离)的一个总表,即‘(((-1 . xxx) (10 x y z)) ((-1 ...)这样的表,然后再对坐标进行排序,排序完成后再对对应实体进行操作,这样应该快一些。
另外,既然是有针对性地计算到特定坐标的距离,那么最好在使用程序时也分片选择实体,不要一下全部选择,系统对实体表操作的速度是很慢的,在实体数量多的时候尤其明显一次选一千个实体计算和分两次每次选五百个实体的使用时间决不是等同的。
 楼主| 发表于 2012-12-10 10:01:51 | 显示全部楼层
zdqwy19 发表于 2012-12-9 23:24
坐标之间设置一个临近长度,与第一点的临近点同第一点构成第一个子表,同时将第一个子表的点从原表删除,以 ...

这是一个方法,关键是这个临时长度如何设定?这个比较麻烦。
 楼主| 发表于 2012-12-10 10:03:14 | 显示全部楼层
ll_j 发表于 2012-12-10 08:21
不要把所有的事情都放在一步做。
楼主在每一步中都对每个实体进行全部的计算,当然慢,你可以把这些过程分 ...

先构成包含实体名和坐标(或距离)的一个总表,然后排序,这个方法可以试一下,确实没必要把整个实体表进行排序,只要有实体名就行了。
发表于 2012-12-10 11:04:19 来自手机 | 显示全部楼层
fwdll 发表于 2012-12-10 10:01
这是一个方法,关键是这个临时长度如何设定?这个比较麻烦。

你的点是一簇簇的,临近长度大于簇间点长度小于簇间长度即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-3 13:28 , Processed in 0.176113 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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