You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB双活塞模拟代码需求:右侧新增活塞实现咨询

MATLAB 右侧新增活塞的连杆运动模拟完整代码

以下是在现有单活塞模拟基础上,右侧新增一个对置活塞的完整可运行代码,包含参数定义、双活塞运动学计算及可视化:

%% 参数定义(原代码缺失部分,需预先设置)
r = 100;          % 曲柄长度 [m],适配可视化范围调整
l = 200;          % 连杆长度 [m]
alpha = linspace(0, 2*pi*2, 1000); % 曲柄旋转角度,覆盖两圈共1000帧

%% 原活塞运动学计算
beta = asin((r/l)*sin(alpha)); % 连杆摆动角度
x = r*cos(alpha) + l*cos(beta); % 活塞位置
d_x = -r*sin(alpha).*alpha(2) - l*sin(beta).*diff([beta(1); beta])/alpha(2); % 速度
d2_x = -r*cos(alpha).*(alpha(2)^2) - l*cos(beta).*(diff([beta(1); beta])/alpha(2)).^2 - l*sin(beta).*diff([beta(1); beta; beta(end)])/(alpha(2)^2); % 加速度

%% 新增右侧活塞(对置布局,相位差π)
alpha2 = alpha + pi; % 第二个曲柄与原曲柄相位差180度
beta2 = asin((r/l)*sin(alpha2));
x2 = r*cos(alpha2) + l*cos(beta2);
d_x2 = -r*sin(alpha2).*alpha(2) - l*sin(beta2).*diff([beta2(1); beta2])/alpha(2);
d2_x2 = -r*cos(alpha2).*(alpha(2)^2) - l*cos(beta2).*(diff([beta2(1); beta2])/alpha(2)).^2 - l*sin(beta2).*diff([beta2(1); beta2; beta2(end)])/(alpha(2)^2);

%% 视频录制设置
B = VideoWriter('double_piston_transition');
B.Quality=100;
B.FrameRate=120;
open(B);
k=figure('units','normalized','outerposition',[0 0 1 1]);
c=1;

%% 循环绘制每一帧
for i=1:1:size(alpha,1)
    % 右侧运动曲线子图:保留原活塞曲线,新增第二个活塞曲线(蓝色区分)
    subplot(3,2,2)
        plot(alpha(1:i),x(1:i),'r', alpha(1:i),x2(1:i),'b'), grid on
        title('活塞行程'), xlabel('曲柄转角 [rad]'), ylabel('[m]')
        axis([0 6 0 90])
    subplot(3,2,4)
        plot(alpha(1:i),d_x(1:i),'r', alpha(1:i),d_x2(1:i),'b'), grid on
        title('活塞速度'), xlabel('曲柄转角 [rad]'), ylabel('[m/s]')
        axis([0 6 -30000 30000])
    subplot(3,2,6)
        plot(alpha(1:i),d2_x(1:i),'r', alpha(1:i),d2_x2(1:i),'b'), grid on
        title('活塞加速度'), xlabel('曲柄转角 [rad]'), ylabel('m/s^2')
        axis([0 6 -1.5*10^7 2.5*10^7])
    
    % 左侧双活塞可视化子图
    subplot(3,2,[1,3,5])
        grid on
        hold on
        axis([-400 400 -250 250]) % 扩大x轴范围以容纳两个活塞
        
        % 绘制原左侧活塞(红色标记)
        plot([0 r*cos(alpha(i))],[0 r*sin(alpha(i))],'LineWidth',3,'Color','k') 
        plot([0],[0],'.','MarkerSize',10,'Color','r')
        plot([r*cos(alpha(i))],[r*sin(alpha(i))],'.','MarkerSize',30,'Color','r')
        rectangle('position',[r*cos(alpha(i))+l*cos(beta(i))-20*cos(pi/4) -20*sin(pi/4) 2*20*cos(pi/4) 2*20*sin(pi/4)],'FaceColor',[0.6 0.6 0.6],'EdgeColor','k','LineWidth',1,'Curvature',0.2)
        plot([r*cos(alpha(i)) r*cos(alpha(i))+l*cos(beta(i))],[r*sin(alpha(i)) 0],'LineWidth',3,'Color','k')
        plot([r*cos(alpha(i))+l*cos(beta(i))],[0],'.','MarkerSize',30,'Color','r')
        
        % 绘制新增右侧活塞(蓝色标记)
        plot([0 r*cos(alpha2(i))],[0 r*sin(alpha2(i))],'LineWidth',3,'Color','k') 
        plot([r*cos(alpha2(i))],[r*sin(alpha2(i))],'.','MarkerSize',30,'Color','b')
        rectangle('position',[r*cos(alpha2(i))+l*cos(beta2(i))-20*cos(pi/4) -20*sin(pi/4) 2*20*cos(pi/4) 2*20*sin(pi/4)],'FaceColor',[0.3 0.3 0.9],'EdgeColor','k','LineWidth',1,'Curvature',0.2)
        plot([r*cos(alpha2(i)) r*cos(alpha2(i))+l*cos(beta2(i))],[r*sin(alpha2(i)) 0],'LineWidth',3,'Color','k')
        plot([r*cos(alpha2(i))+l*cos(beta2(i))],[0],'.','MarkerSize',30,'Color','b')
        
        hold off
    
    vid(c)=getframe(k);
    writeVideo(B,vid(c))
    c=c+1;
end

close(k);
close(B);

关键修改说明

  • 参数补全:补充原代码缺失的曲柄/连杆长度、角度序列等核心参数,确保代码可直接运行
  • 双活塞运动学:为右侧活塞设置与原活塞180°相位差的曲柄角度,通过相同运动学公式计算位置、速度、加速度
  • 可视化调整:扩大绘图区域x轴范围,用红/蓝标记区分两个活塞的曲柄端点、活塞端点,活塞块用不同颜色区分
  • 曲线更新:右侧三个子图新增第二个活塞的运动曲线,便于对比两者的行程、速度、加速度差异

内容的提问来源于stack exchange,提问作者Long Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:45:32