Re: [討論] 每連結一點尋找最近座標點
※ 引述《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)
討論串 (同標題文章)