Движение прямоугольника с увеличивающимися сторонами по траектории у=sinc(cos(х)).
clc
clear
d_x_ = 0.1;
XX = [0:d_x_:10];
YY = sinc(cos(XX));
plot(XX, YY);
axis([-0.4 10.4 -0.1 1.1]);
hold on
dx=0.01; x=0;
y=sinc(cos(x));
X=x;
Y=y;
h=line(X,Y,'EraseMode','none');
%---Cycle of dynamic graphing:---
for i =1:1000
xn=x+dx;
yn=sinc(cos(xn));
d_x = d_x_/2 + (i*d_x_)/300;
X = [xn-d_x/2, xn-d_x/2, xn+d_x/2, xn+d_x/2, xn-d_x/2];
Y = [yn-d_x/8, yn+d_x/8, yn+d_x/8, yn-d_x/8, yn-d_x/8];
set(h,'XData',X,'YData',Y, 'Color','r');
axis([-0.4 10.4 -0.1 1.1]);
set(h,'XData',XX,'YData',YY, 'Color','b'); % закрашиваем белым цветом
pause(0.00001);
set(h,'XData',X,'YData',Y, 'Color','w');
x=xn;
y=yn;
end
Т.е. численно решаешь диф. уравнение каким-нибудь методом. На i итерации находишь y(i). Закрашиваешь предыдущее изображение белым цветом. Рисуешь новое, в качестве расстояния массы на пружинке принимая y(i). Нужно наиболее внимательно подойти к перерисовке пружины. Как ее масштабировать при изменении y(t) понятно?