Re: [討論] 每連結一點尋找最近座標點

看板MATLAB作者 (郝渴連)時間13年前 (2012/12/10 13:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《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)
文章代碼(AID): #1GnMpCUS (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1GnMpCUS (MATLAB)