[英]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.