作者mp19990920 (郝渴连)
看板MATLAB
标题Re: [讨论] 每连结一点寻找最近座标点
时间Mon Dec 10 13:01:58 2012
※ 引述《mangobrother (芒果哥)》之铭言:
: 还是MATLAB新手...
: 一切都是自学 所以写的内容不好看请见谅
: ------------------------------------------------------
: 下面是写得很丑的CODE
: function node
: x_node = 100*rand(10,1); %取X轴的乱数
: y_node = 100*rand(10,1); %取Y轴的乱数
: result = cat(2,x_node,y_node); %合并X轴与Y轴座标点
: [u,v] = max(sqrt((x_node-50).^2+(y_node-250).^2)); %找出离BS最远的NODE距离并储
: 存到U,V,V为第几位
: disp('Leader座标点 = ');
: disp(result(v,:)); %leader座标
: disp('Leader顺序为 = ');
: disp(v); %leader顺序
: %disp(u);离BS最远距离
: node_number = length(x_node);
: for x = 1:node_number %计算任意两点之间的距离
: for y = 1:node_number
: any_two_distance(x,y) =(sqrt((x_node(x) - x_node(y)).^2 + (y_node(x) -
: y_node(y) ).^2)); %将结果写入对应的矩阵
: end
: end
: disp(any_two_distance);
: end
: 目前已经可以找出各个点之间彼此的距离
首先,
单从你目前的code来看,
这不叫做写matlab程式!
而是 "使用matlab的语法写程式"
提供两个替代方案给您参考:
1. 使用矩阵来运算
z = complex(x_node, y_node);
nZ = length(z);
matDist1 = abs(repmat(z(:), 1, nZ) - repmat(z(:).', nZ, 1));
(因为这个问题中matDist必为对称,所以此法不太适合此处)
2. 使用内建function来运算
distlist = pdist([x_node, y_node], 'euclidean');
matDist2 = squarefor(distlist);
写matlab程式,
就是要用矩阵的角度来思考程式资料流,
然後尽量使用内建function来完成。
: 接下来是想要从leader点开始连接最近的点
: 首要是先找出除了leader外另外九点离leader最近的点进行连线
: 连到第二个点後,寻找第三个未被连接过的最近点进行连线
: 目前卡在这边有点没头绪
: 卡住的问题有
: 1.
: 如何判定点并未连接过?
: 2.动态调整一开始先连结一到二 再来从二到三
: 知道连线是用plot 但是也得照顺序输入值才可以....
: 有搜寻过一些关键字 但没有找到作法
: 会做这个也是为了帮助朋友,但发现自己真的还有待加强 囧
: 还烦请一些关键字指点或小片段的程式提示了
: 谢谢各位
目前你卡住的问题不难,
但你可能忽略掉几件事情要考虑,
假设目前连好3个点了(x),
第4个点怎麽找?
单纯找离leader最近?
离这3个点其中之一最近?
o leader
x-----x o
|
|
|o
|
x
找到後与谁相连?
leader?其他点?
您要处理的问题是图论的领域,
给您以下这个网址参考参考:
http://www.csie.ntnu.edu.tw/~u91029/SpanningTree.html
--
哀愁犹如雪花梢然飘落,
白雪厚积,
终究成了孤独的小结晶,
谁能融化我冰冻已久的孤寂?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.21.63.132
※ 编辑: mp19990920 来自: 211.21.63.132 (12/10 13:03)