2016-06-15 2 views
0

Я хочу, чтобы имитировать транспортное средство, отслеживающее известный путь, то, над чем я работаю, - это просто анимированная фигура, движущаяся по пути, я написал свой код под matlab. Я получаю квадрат (представляю транспортное средство), перемещающееся по пути, но я хочу удалить последние квадраты (воспоминания), просто хочу каждый квадрат каждый раз с правильной ориентацией. Кто-нибудь, пожалуйста, сообщите мне, что я могу сделать для этого. мой код иллюстрирует то, что я объяснил ранее:Анимированная форма проходит по известному пути

r=0.25; 
t=0:0.1:10; 
A=100; 
yo=A*sin(t);%%desired output position on Y axe 
Voy=diff(yo); 
Vox=ones(1,101); 
Voy(length(Voy)+1)=Voy(length(Voy)) 
Vmx=sqrt(Voy.*Voy+Vox.*Vox); 
theta=atan(Voy./Vox); 
%%Speed's equations 
Voy=Vmx.*sin(theta); 
Vox=Vmx.*cos(theta); 
x=0; 
y=0; 
t=0; 
for i=1:1:length(Voy); 
x=Vox(i)*(t); 
y=Voy(i)*0.1; 
pause(0.05) 
t=t+0.1; 
plot(x,y,'--gs',... 
'LineWidth',2,... 
'MarkerSize',30,... 
'MarkerEdgeColor','b',... 
'MarkerFaceColor',[0.5,0.5,0.5]) 
hold on 
end 
+0

Пожалуйста, задайте вопрос более конкретно. Это о визуализации в Matlab? –

ответ

1

Я думаю, что следующий код делает то, что вы ищете:

r=0.25; 
t=0:0.1:10; 
A=100; 
yo=A*sin(t);%%desired output position on Y axe 
Voy=diff(yo); 
Vox=ones(1,101); 
Voy(length(Voy)+1)=Voy(length(Voy)) 
Vmx=sqrt(Voy.*Voy+Vox.*Vox); 
theta=atan(Voy./Vox); 
%%Speed's equations 
Voy=Vmx.*sin(theta); 
Vox=Vmx.*cos(theta); 
x=0; 
y=0; 
t=0; 
figure; 

ph = plot(x,y,'--gs',... 
    'LineWidth',2,... 
    'MarkerSize',30,... 
    'MarkerEdgeColor','b',... 
    'MarkerFaceColor',[0.5,0.5,0.5]); 

set(gca,'XLim',[0 10]); 
set(gca,'YLim',[-2 2]); 

for i=1:1:length(Voy); 

    x=Vox(i)*(t); 
    y=Voy(i)*0.1; 
    set(ph,'XData',x); 
    set(ph,'YData',y); 
    pause(0.05) 
    t=t+0.1; 
end 

Хитрость заключается в том, используя ручку участка для обновляя свои данные в for-loop. Это может быть сделано путем изменения свойства сюжетного объекта XData и YData:

set(ph,'XData',x); 
set(ph,'YData',y); 

Кроме того, я бы вручную установить Х- и Y-пределы осей по

set(gca,'XLim',[0 10]); 
set(gca,'YLim',[-2 2]); 

В противном случае оно динамически устанавливаться в соответствии с текущими данными, установленными в несколько этапов.

+0

спасибо, что решают большую часть моей проблемы, все еще хотят контролировать ориентацию квадрата (Робота) над Линией, чтобы быть ближе к реальному движению робота, поэтому я могу достичь этого с помощью последнего маркера. –

+1

Это означает, что вы хотите «наклонить» квадрат или, скорее, контролировать угол квадрата? На данный момент вы используете маркер для визуализации. Поскольку невозможно настроить ориентацию маркера по функциям, было бы лучше использовать что-то вроде 'patch' для визуализации вашего робота. – bushmills