huazi071783 发表于 2011-6-10 12:44

求助点云中找出距离最小10个点和点序列号

本帖最后由 huazi071783 于 2011-6-10 12:44 编辑

一个坐标中有很多个随机点(xi,yi),这些点有序号标定i,我选定一个点(xn,yn),如何找出和选定的点的距离最小的10个点,并且要知道这10个点的序号i?

tenglang 发表于 2011-6-10 13:59

sn=(xn-xi)^2+(yn-yi)^2
找出最小的10个sn不就得了

huazi071783 发表于 2011-6-10 15:23

本帖最后由 huazi071783 于 2011-6-10 15:27 编辑

回复 2 # tenglang 的帖子


是这样的,算出了距离后然后用sort就找到了最小的十个最小距离
但是点的数量繁多,上十万个,我的目的是要找到这些具体的点的 i 值
找出最小的距sn后,然后如果再从小到大用if语句找的话就有双重循环

snn=sort(sn);
for i=1:10
for j=1:N            %N为点数
if snn(i)==sn(j)
num(i)=j;
end
end
end
这样算计算很慢
因为我要计算几十个这样的点云,就更慢了
有没有更简洁方法呢?

ChaChing 发表于 2011-6-11 01:04

回复 3 # huazi071783 的帖子

help sort! 并看仔细些
= sort(A,...)

huazi071783 发表于 2011-6-12 10:46

回复 4 # ChaChing 的帖子

明白,谢谢

ChaChing 发表于 2011-6-12 10:53

回复 5 # huazi071783 的帖子

建议养成好习惯, 时常help下! 以免被习惯用法所圈住!
个人也是曾吃过此样的苦

viviani1 发表于 2011-6-14 09:57

老兄,我遇到的问题和你差不多哦,也是在点云中寻找和给定点距离最近的点,我用的笨办法,双循环加if ,速度慢的要死,请问有啥优化的方法么

viviani1 发表于 2011-6-14 20:19

回复 2 # tenglang 的帖子

我的问题是要在点云中找到离给出点距离最小的一个点,所以不能用4楼的方法,倒是你的这个思路启发了我,我把程序改为:
for k=1:128000
=min((xii(k)-t.x).^2+(yii(k)-t.y).^2+(zii(k)-t.z).^2);
xii(k)=t(I).nx0;
yii(k)=t(I).ny0;
zii(k)=t(I).nz0;
end
其中t是结构体变量,但是运行结果出现错误,显示为??? Error using ==> minus
Too many input arguments.
t.x是1x189599的向量,不会是因为这个t.x太大了吧?

ChaChing 发表于 2011-6-14 23:54

回复 8 # viviani1 的帖子

Ref : 4F, http://forum.vibunion.com/thread-103567-1-1.html
页: [1]
查看完整版本: 求助点云中找出距离最小10个点和点序列号