电子信息智能控制方向的研究生。论文这块本来用实物的,结果老板突然改了方向,要求用仿真做,建模搭建一个消防水炮3D模型,能够控制俯仰角,并且能模拟发射得到水炮落点。但我寻思这一要建模,二这个水还和流体有关。根本没接触过。有没有朋友能够讲一下我们老板这个要求能不能达到,如果能,大概是用什么方法,如果无法达到要求我还是直接坚持用实物吧
3D模型15块钱这个工作量是劝退了,2D模型还是有很多例子的,比如这个导弹模型的,可以调整仰角,自定义修改一下计算射程,改下背景就可以:
%导弹拦截
clear %清除变量
% rand('state',0) %随机状态初始化
v2=1.1; %拦截导弹速率与来袭导弹初速度之比
%v2=1; %拦截导弹速率与来袭导弹初速度之比
%v2=0.9; %拦截导弹速率与来袭导弹初速度之比
T=linspace(0,1); %飞行时间
while 1 %做无限循环
figure %创建图形窗口
axis([0,1,-0.2,0.6]) %坐标范围
axis equal off %隐藏坐标
title('导弹拦截','FontSize',20) %标题
text(0,0.5,'导弹来袭时,按空格键发射拦截导弹.','FontSize',16)%显示操作方法
hold on %保持图像
plot([0,1],[0,0]) %画地平线
for th=[0:10:90]
% th=90*rand; %0到90度之间的随机角度
th=th*pi/180; %化为弧度
xx1=0;yy1=0; %来袭导弹的初坐标
xx2=1;yy2=0; %拦截导弹的初坐标
x2=1;y2=0; %拦截导弹的终坐标的初值
c=''; %字符变量置空
dt=0; %时间间隔取0
for t=T %按来袭导弹的时间循环
x1=t*sin(2*th); %计算来袭导弹的横坐标
y1=2*sin(th)^2*(t-t^2); %计算来袭导弹纵坐标
plot([xx1,x1],[yy1,y1],'k','LineWidth',2)%画来袭导弹轨迹
s=sqrt((x2-x1)^2+(y2-y1)^2); %计算两弹之间的距离
if s<=0.02 %如果两导弹距离很小或对方导弹落地
plot(x1,y1,'*','MarkerSize',20)%画爆炸射线
disp(['发射角度为',num2str(th*180/pi),'开始拦截成功'])
break %退出循环
end %结束循环
xx1=x1;yy1=y1; %保存来袭导弹的坐标
c=get(gcf,'CurrentCharacter'); %从键盘取图形窗口的当前字符
if length(c)~=0&&c==' ' %如果c中有字符且为空格
dt=T(2); %取时间间隔
end %结束条件
x2=x2-(x2-x1)/s*2*v2*sin(th)*dt;%拦截导弹的横坐标
y2=y2-(y2-y1)/s*2*v2*sin(th)*dt;%拦截导弹的纵坐标
plot([xx2,x2],[yy2,y2],'r','LineWidth',2)%画拦截导弹的轨迹
xx2=x2;yy2=y2; %保存拦截导弹的坐标
pause(0.05) %延时
end %结束循环
end
c=input('继续玩?(y/n)','s'); %提示键盘输入选择
if c~='y' break,end %不是y则退出游戏
end
disp('请按空格关闭全部窗口')
pause()
close all;