明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2898|回复: 14

[提问] [循环套循环]请问如何优化这个算法

[复制链接]
发表于 2015-1-28 16:16:26 | 显示全部楼层 |阅读模式
本帖最后由 peraperson 于 2015-1-29 09:17 编辑

目的是:图上有一些线段和文字 想实现如果文字在线段中点附近(文字点与中点距离在10以内视为接近)则变红
现在建立了两个表 分别为文字和线段的 然后循环套循环判断 即(repeat 线段 (repeat 文字)) 这样的问题是太慢了
请问有什么好的办法吗 谢谢
发表于 2015-1-28 21:28:58 | 显示全部楼层
可以对点表按X、Y、Z坐标进行排序,当两个表中对应的元素X坐标相差较多时,可排除大量元素;当X坐标在要求范围内时,再对Y坐标进行上述比较,直到找到符合条件的元素。

当然代码要写出来还是不容易的。。
发表于 2015-1-28 22:59:23 | 显示全部楼层
首先要确定一个前提
文字点是指节点还是包围框的4角点
再视线段和直线的数量
哪个少以哪个循环作ssget'c/p
代码不会太复杂的
 楼主| 发表于 2015-1-29 09:15:02 | 显示全部楼层
本帖最后由 peraperson 于 2015-1-29 09:19 编辑
vectra 发表于 2015-1-28 21:28
可以对点表按X、Y、Z坐标进行排序,当两个表中对应的元素X坐标相差较多时,可排除大量元素;当X坐标在要求范 ...

谢谢 即使要排除貌似也要用到循环
 楼主| 发表于 2015-1-29 09:17:05 | 显示全部楼层
masterlong 发表于 2015-1-28 22:59
首先要确定一个前提
文字点是指节点还是包围框的4角点
再视线段和直线的数量

谢谢 文字是组码10的点 关键在于文字和线段都很多 2个循环嵌套起来太慢了
发表于 2015-1-29 10:57:45 | 显示全部楼层
本帖最后由 longcashman 于 2015-1-29 11:00 编辑

按你的描述每个文字坐标都要分别与每段线中点求距离做比较,能节省的地方也就是取坐标这个阶段
建议文字图元名成一个表,然后一次所有把文字和线段中点坐标取出来各自成表
再按你的结构但改为(repeat 文字坐标表 (repeat 线段中点表)) 用vl-position 把图元表和文字坐标表联系起来
 楼主| 发表于 2015-1-29 19:13:26 | 显示全部楼层
本帖最后由 peraperson 于 2015-1-29 19:14 编辑
longcashman 发表于 2015-1-29 10:57
按你的描述每个文字坐标都要分别与每段线中点求距离做比较,能节省的地方也就是取坐标这个阶段
建议文字图 ...

谢谢 文字和线段跟你说的一样各成一个表的 我之前也有考虑所用vl-positon这个想法 问题在于 文字的点不一定就是在中点位置 而是附近距离10以内  所以貌似用不了 还是要两个循环
发表于 2015-1-29 19:44:20 | 显示全部楼层
peraperson 发表于 2015-1-29 09:15
谢谢 即使要排除貌似也要用到循环

无序的两个循环时间复杂度是O(n^2),排序之后,两个表均循环一次即可,时间复杂度是O(n)
发表于 2015-1-30 11:16:17 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-1-30 11:17 编辑

根据楼主的描述,可以先选出文字,以其基点为中心,10为距离做一个选择框进行ssget"F"选择线段,如果选择到了改色,选择不到不管它
当然,这样其实是把问题扔给了CAD去处理
另外,其实两次repeat也没什么,至少算法清楚好理解也好写,只需要(repeat 线段 (repeat 文字  将已经处理过的文字从表中去除)) 这样第二层循环会越来越小,会省下很多时间,如果一条线段中点附近的文字一般情况下会有几个或者一个文字周围会有多条线段的话,这样的效果会比较明显
发表于 2015-1-30 11:29:11 | 显示全部楼层
llsheng_73 发表于 2015-1-30 11:16
根据楼主的描述,可以先选出文字,以其基点为中心,10为距离做一个选择框进行ssget"F"选择线段,如果选择到 ...

这个法子只能判定附近有线但不一定是在中点附近的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 14:03 , Processed in 0.184186 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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