我有一架飞机模拟器,我试图在一块情节中绘制它的预定轨迹和实际飞行路径。
最初我使用的是来自Simulink的XY Graph块,但它不允许在后台显示第二个信号。所以我考虑使用一个解释的MATLAB功能块并在那里绘制两个东西。
我有一个初始化M文件,我在其中定义向量x_t和y_t,轨迹的坐标,并打开图形。我创建了这两个全局变量,Simulink中的函数与模拟中的x_e和y_e一起接收它们。
现在的问题是它变得非常慢,我实际上无法正常控制飞机。有关如何实现目标的任何建议?感谢您的帮助。
下面我已经将我用的代码用于此目的,以便您可以看到整个图片。顺便说一句,'我'是一个变量,用于将数据存储到向量中,并在另一个函数中递增。
*** Initialization.m ***
% The definition of x_1:x_5 and y_1:y_5 has been omitted.
x_t=[x_1 x_2 x_3 x_4 x_5];
y_t=[y_1 y_2 y_3 y_4 y_5];
figure(1);
----------------------------
*** Flightpath.m ***
function Flightpath(u)
%% Variables
%%
global i x_t y_t x_e y_e;
x_e(i)=u(1); y_e(i)=u(2);
%% Real-Time Graphic
%%
t=plot(x_t,y_t,20000,10000,'ro',x_e,y_e);
axis([-5000 25000 -5000 50000]); set(t,'MarkerFaceColor','r');
答案 0 :(得分:1)
您应该更改多项内容,
在每个时间步长增加x_e和y_e的大小。这总是很糟糕,而且会大大减慢速度。 (我知道你可能不会提前知道最终的尺寸,但这并不能否定在每一步中增长都很糟糕的事实。)
当较低级别的功能足够时,您正在使用plot
,这是一个高级例行程序。
您正在绘制每个时间步的x_t和y_t,只需要绘制一次。
您应该在时间0为x_e和y_e绘制(可能只包含2个点的虚拟数据)并关闭线条可见性,并存储线条句柄。然后在每个时间步骤,您应该获取该行的XData和YData,并将其替换为包含当前时间点的新数据的新XData和YData。
通过编写仅使用解释功能块的M代码S函数,您可以更好地控制发生的事情。