簡體   English   中英

將 (x,y) 坐標附加到 Matlab 循環中的變量以進行函數調用

[英]Append (x,y) coordinates to variable in Matlab loop for function call

我有幾千個點的散點圖,它們位於由幾個線段定義的下邊界之上。 我的目標是找到從每個點到 pt 位於其上方的下邊界(由連接的線性和傾斜線段組成)的最短距離,並將所有點的距離相加以供后續后處理。

我在網上找到了一個點對線函數腳本( https://www.mathworks.com/matlabcentral/fileexchange/64396-point-to-line-distance ),我已經單獨測試過,現在想集成到我的腳本。 該函數采用點數組(雙[0.1,0.7;0,0.5;...]類),例如[0.1,0.7;0,0.5;...]並采用兩個[x,y]點,它們位於要計算的最短距離的線上.

到目前為止,我已經編寫了一個while循環,它循環遍歷已保存到工作區的數據集中的所有行(我想忽略的零除外)。 然后我使用嵌套的if循環來檢查給定的點是否在給定的下邊界段的 x 范圍內(我總是想計算到給定 pt 所在的下邊界段的最短距離),最后我嘗試將點的給定(x,y)坐標附加到將成為函數輸入之一的變量。 定義下邊界線段的兩個點對每個線段進行了硬編碼並且不會改變。

這是我的代碼片段:

short_deviation = 0;
idx = 1;
while idx <= numel(my_data(:,5)) && not(my_data(idx,5) == 0)
    ...
    if my_data(idx,5) < my_data(2,9) && my_data(idx,5) > my_data(1,9) % check that pt is in x range of lower segment
        pt(:,idx) = my_data(idx,3:4); % CURRENT ERROR - Try to append given pt to list for function input
        v1 = my_data(1,9:10); % two hard coded x,y pts which lie on lower boundary to which I want the distance
        v2 = my_data(2,9:10);
        distance_2D(idx) = point_to_line_dist(pt, v1, v2); % calling function
    end
    ...
    idx = idx + 1;
end

當我運行當前代碼時,我收到以下錯誤消息:

無法執行賦值,因為左側的大小為 1×1,右側的大小為 1×2。

My_script 中的錯誤(第 xxx 行)
pt(:,idx) = my_data(idx,3:4);

現在我寫出這段代碼,我認為另一個潛在的錯誤是我在if循環中調用了函數distance_2D - 我也不確定調用函數的語法是否正確(這里經驗很少),但我沒有由於我提到的先前的錯誤,沒有走到這一步。

該錯誤表明pt以前的大小錯誤。 要運行您的代碼,它必須有兩行,否則數據將無法容納。 你可以用

pt=zeros(2,numel(my_data(:,5)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM