簡體   English   中英

如何在Matlab中實時繪制3D點?

[英]How do I plot 3D points in real time in Matlab?

我對在Matlab中實現繪制3D點的最佳方法感到困惑。 我的一個想法是繼續更新x,y,z值的數組,然后繪制它,但是我希望它能實時繪制,因為我正在為項目使用LiDAR掃描儀,並希望顯示正在創建的3D地圖。 這是我一直在嘗試的示例:

x = rand(10,1) ; y = rand(10,1) ;
h = scatter(x,y,'Or') ;
for i = 1:100
    x = rand(10,1) 
    y = rand(10,1) ;
    set(h,'XData',x,'YData',y) ;
    drawnow
    pause(0.1)
end

我對此有一個問題,當我繼續添加Z值時,它仍然存在。 即使在3D模式下,繪圖也能正常工作,但是循環的每次迭代都會刪除所有先前的點,然后將其替換為新的點。 在制作地圖時,我需要以最高的效率維護這些點。

因此,我想知道是否存在一種實時繪制的方法,而不必一遍又一遍地繪制整個事物,而只是將這些點“附加”到3D平面上。 如果沒有,我想知道如何修復我的代碼,以使這些點不會被替換。

代替set(h,'XData',x,'YData',y) ; hold on使用新的繪圖,可以使您在平面上附加一些內容,因此以下代碼可能有效:

x = rand(10,1) ; y = rand(10,1) ;
h = scatter(x,y,'Or') ;
hold on      % allow appending
for i = 1:100
    x = rand(10,1) 
    y = rand(10,1) ;
    h = scatter(x,y,'Or') ;   %draw new points
%     set(h,'XData',x,'YData',y) ;
    drawnow
    pause(0.1)
end

但是強烈建議保留所有數據,例如將新統計信息保存在舊數據之后的新列中:

[x,y] = deal(zeros(10,100));           %pre-allocate
figure(1); hold on
for ii = 1:100
    x(:,ii)=rand(10,1);                %save new x
    y(:,ii)=rand(10,1);                %save new y
    scatter(x(:,ii),y(:,ii),'Or') ;    %plot them
    drawnow
    pause(0.1)
end

此外, hold on有時下行的時候,我們需要將把手處理,如每十個點將具有獨特的手柄還編輯的身影。 為了將它們保持一體,我認為如果我們沒有太多數據要繪制,對代碼進行較小的更改可能是一個更好的解決方案(它要求重新允許RAM中的向量,``清理''圖形並重新繪制所有圖形)點,包括那些舊的點,一次又一次)。

x = rand(10,1) ; y = rand(10,1) ;
h = scatter(x,y,'Or') ;
for i = 1:100
    x(end+1:end+10) = rand(10,1) ;     % append x
    y(end+1:end+10) = rand(10,1) ;     % append y
    set(h,'XData',x,'YData',y) ;       % draw new figure
    drawnow
    pause(0.1)
end

暫無
暫無

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

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