2017-05-23 43 views
1

我有一個在Matlab飛行的飛機。 我想在飛行過程中製作其軌跡動畫,就像它在後面留下痕跡一樣。 我試圖使用animatedline函數如果Matlab,但我只是卡在這裏。我的功能只顯示座標軸,僅此而已。如何在Matlab 2015b的飛行過程中製作飛機航跡動畫?

飛機座標正在從Simulink模型飛行期間進入。 請幫幫我!

function trajectory(uu) 
    pn  = uu(1);  % inertial North position 
    pe  = uu(2);  % inertial East position 
    pd  = uu(3);  % inertial Down position 
    t  = uu(4);  % time 

    if t==0, 
    figure(10), clf 
    S = 1500; 
    view(0,90) 
    axis([-S,S,-S,S,-.1, S]); 
    grid on  
    drawnow 
    else 
    h = animatedline; 
    x=pe, y=pn; z=-pd; 
    addpoints (h, x, y, z); 
    drawnow 
end 
+0

在功能,你只是繪製一個點:是'uu'二維陣列,或只是1×4?你也可以在添加點之前重新創建動畫線條句柄,所以放在創建圖形的位置,我想。我對這個函數並不熟悉,但是[comet3](https://www.mathworks.com/help/matlab/ref/comet3.html)可以幫你。 –

+0

'uu'只是1x4。當我把h ='animatedline;'我在那裏創建圖形時,我得到了**未定義函數或變量'h'**我不確定如何使用'comet3'來實現它,因爲'comet3'只能提前繪圖我的軌跡是未知的,因爲在飛行過程中座標正在輸入。 – user8053696

+0

所以要找到句柄'h',你可以使用'h = findobj(圖(10),'Type','AnimatedLine')'',其中'h = animatedline;'是當前的。雖然如果你是用simulink做的話,可能會有更好的方法,我對此不太瞭解。 –

回答

0

您正在嘗試使用手柄h繪製,但它能夠在函數調用結束時被銷燬。我提出以下解決方案,

% Function 
function trajectory(uu, hLine) 

pn  = uu(1);  % inertial North position 
pe  = uu(2);  % inertial East position 
pd  = uu(3);  % inertial Down position 

x = pe; y = pn; z = -pd; 
addpoints (hLine, x, y, z); 
drawnow 
end 

% script 
figure(10); 
S = 1500; 
view(0,90) 
axis([-S, S, -S, S, -.1, S]); 
grid on 

lineHandle = animatedline('Color','r','LineWidth',3); 

for i = 1:nPoints 
    % replace this with your value 
    currentValue = 1000*rand(1, 4); 
    trajectory(currentValue, lineHandle); 
end 
+0

謝謝,但彈道預先未知,它是從Simulink模型進入的,它可以根據飛行條件改變。 – user8053696

+0

@ user8053696,參見編輯答案。根據您的模擬來替換'nPoints'和'currentValue'。 – kedarps

+0

我不明白爲什麼腳本與功能分開。你能解釋一下嗎?此外,該功能是否可以實時繪製軌跡?我確定這個函數只有在獲得所有點後纔會繪製軌跡? – user8053696