想要模拟小球在重力作用下沿既定轨道下滑(最速线),使用comet函数的话无法将几条轨道同时释放小球,有什么技巧可以解决吗。
clear
clc
warning('off')
syms t_0 %%定义在目标点的角度%%
x_0=10*rand(1)+5;
y_0=10*rand(1)+5;%%随机生成目标点
eqn =@(t_0)(t_0-sin(t_0))/(1-cos(t_0))-(x_0/y_0);
t_0 = fzero(eqn, pi);
r = y_0/(1-cos(t_0));%%解出摆线圆的半径%%
T = 0:0.0001:t_0;
a_1 = -rand(1); %%二次函数二次项系 数%%
x = r*(T-sin(T));
y_1 = r*(1-cos(T)); %%摆线%%
y_2 = a_1*(x.^2)+(y_0-a_1*x_0^2).*x/x_0;%%抛物线%%
y_3 = y_0*x/x_0;%%直线%%
y_4 = y_0*x./0.5.*(x<=0.5)+y_0*(x>0.5);%%折线%%
plot(x,y_1,x,y_2,x,y_3,x,y_4)
set(gca,'Ydir','reverse');
hold on
comet(x,y_1);
comet(x,y_2);
comet(x,y_3);
comet(x,y_4);%%暂时没有用随时间的水平分量表示,主要不能同时画图很难受%%
该回答引用GPTᴼᴾᴱᴺᴬᴵ
您可以使用MATLAB的figure和axes函数创建多个子图,然后在每个子图中分别绘制小球沿不同轨道下滑的动态效果。以下是一个示例代码:
clear
clc
warning('off')
syms t_0 %%定义在目标点的角度%%
x_0=10*rand(1)+5;
y_0=10*rand(1)+5;%%随机生成目标点
eqn =@(t_0)(t_0-sin(t_0))/(1-cos(t_0))-(x_0/y_0);
t_0 = fzero(eqn, pi);
r = y_0/(1-cos(t_0));%%解出摆线圆的半径%%
T = 0:0.0001:t_0;
a_1 = -rand(1); %%二次函数二次项系 数%%
x = r*(T-sin(T));
y_1 = r*(1-cos(T)); %%摆线%%
y_2 = a_1*(x.^2)+(y_0-a_1*x_0^2).*x/x_0;%%抛物线%%
y_3 = y_0*x/x_0;%%直线%%
y_4 = y_0*x./0.5.*(x<=0.5)+y_0*(x>0.5);%%折线%%
figure % 创建新的图形窗口
ax1 = subplot(2,2,1); % 创建第一个子图
plot(ax1,x,y_1);
set(ax1,'Ydir','reverse');
title(ax1,'摆线');
ax2 = subplot(2,2,2); % 创建第二个子图
plot(ax2,x,y_2);
set(ax2,'Ydir','reverse');
title(ax2,'抛物线');
ax3 = subplot(2,2,3); % 创建第三个子图
plot(ax3,x,y_3);
set(ax3,'Ydir','reverse');
title(ax3,'直线');
ax4 = subplot(2,2,4); % 创建第四个子图
plot(ax4,x,y_4);
set(ax4,'Ydir','reverse');
title(ax4,'折线');
hold(ax1,'on'); % 在第一个子图中绘制小球的动态效果
comet(ax1,x,y_1);
hold(ax2,'on'); % 在第二个子图中绘制小球的动态效果
comet(ax2,x,y_2);
hold(ax3,'on'); % 在第三个子图中绘制小球的动态效果
comet(ax3,x,y_3);
hold(ax4,'on'); % 在第四个子图中绘制小球的动态效果
comet(ax4,x,y_4);
在这个示例中,使用subplot函数将图形窗口划分为2×2的子图,然后在每个子图中绘制对应的轨道并绘制小球的动态效果。