2014年国赛高教杯数学建模A题嫦娥三号软着陆轨道设计与控制策略解题全过程文档及程序
2014年国赛高教杯数学建模
A题 嫦娥三号软着陆轨道设计与控制策略
嫦娥三号于2013年12月2日1时30分成功发射,12月6日抵达月球轨道。嫦娥三号在着陆准备轨道上的运行质量为2.4t,其安装在下部的主减速发动机能够产生1500N到7500N的可调节推力,其比冲(即单位质量的推进剂产生的推力)为2940m/s,可以满足调整速度的控制要求。在四周安装有姿态调整发动机,在给定主减速发动机的推力方向后,能够自动通过多个发动机的脉冲组合实现各种姿态的调整控制。嫦娥三号的预定着陆点为19.51W,44.12N,海拔为-2641m(见附件1)。
嫦娥三号在高速飞行的情况下,要保证准确地在月球预定区域内实现软着陆,关键问题是着陆轨道与控制策略的设计。其着陆轨道设计的基本要求:着陆准备轨道为近月点15km,远月点100km的椭圆形轨道;着陆轨道为从近月点至着陆点,其软着陆过程共分为6个阶段(见附件2),要求满足每个阶段在关键点所处的状态;尽量减少软着陆过程的燃料消耗。
根据上述的基本要求,请你们建立数学模型解决下面的问题:
(1)确定着陆准备轨道近月点和远月点的位置,以及嫦娥三号相应速度的大小与方向。
(2)确定嫦娥三号的着陆轨道和在6个阶段的最优控制策略。
(3)对于你们设计的着陆轨道和控制策略做相应的误差分析和敏感性分析。
附件1: 问题的背景与参考资料;
附件2: 嫦娥三号着陆过程的六个阶段及其状态要求;
附件3:距月面2400m处的数字高程图;
附件4:距月面100m处的数字高程图。
整体求解过程概述(摘要)
本文研究的是嫦娥三号软着陆轨道设计与最优控制策略问题,根据动力学相关原理,建立了嫦娥三号软着陆轨迹模型,以燃料消耗量最小为目标,得到软着陆过程中各阶段的最优控制策略。
针对问题1,首先确定通过嫦娥三号着陆准备轨道位于其着陆点所在经线与月心构成的平面内,然后对嫦娥三号在主减速段进行受力分析,以近月点在月球表面的投影点为原点,以着陆轨道参考系纵向平面为xoy面,以初始飞行方向为x轴,以原点与近月点的连线方向为y轴,建立平面直角坐标系,根据牛顿第二定律,建立嫦娥三号主减速段轨迹模型,以燃料消耗量最小为目标,通过轨迹离散化,逐步迭代求得该阶段的水平位移,再依据地理学经纬度计算规则,建立地表距离与经纬度转化模型,最终得到近月点在月球表面的投影位置为19.51’W,31.68’N,距离月球表面高度为15km,远月点在月球表面的投影位置为160.49’E,31.68’S,距离月球表面高度为100km。利用机械能守恒定理和开普勒第二定律,最终得到近月点与远月点速度的大小分别为为1.692 km/s ,1.614km/s。
针对问题2,根据牛顿第二定律,以每个阶段初始点和终值点的状态为约束,以燃料消耗最小为目标,建立全局最优模型,通过轨迹离散化,逐步迭代求得每个阶段的水平位移,分别得到软着陆过程6个阶段着陆轨迹方程及其对应的最优控制策略;在粗避障段和精避障段,我们将所给数字高程图均分成9块,综合相对高程差与标准差定义平坦度指标来衡量每一块区域,从而选取最佳着陆点;在粗避障段,分别从两种运动状态:其一是先把主减速发动机关闭,在进行一段时间匀加速直线运动后,再次打开发动机,进行减速直线运动,其二是整个阶段都进行匀速直线运动,以燃料消耗最小为目标,确定前者更优从而确定该阶段最优控制策略。
针对问题3,从改变近月点离月球表面的距离和主减速发动机提供的推力两个方面,对嫦娥三号在该段的水平位移、燃料消耗等参数进行灵敏度分析,发现近月点离月球表面的距离与该段的水平位移和燃料消耗呈线性正相关,发现主减速发动机提供的推力与该段的水平位移呈线性负相关,与该段的燃料消耗呈线性正相关。由于嫦娥三号在主减速段水平位移最大,选取该段从对近月点离月球表面的距离变化和主减速发动机提供的推力变化两个角度对模型进行局部阶段误差分析,通过计算每个阶段时间的相对误差对模型进行整体误差分析。
最后,对模型的优缺点进行评价,并提出改进的方向。
模型假设:
(1)假设月球引力场为垂直于月面的均匀引力场;
(2)假设在几百秒范围内的下降时间里,月球引力非球项、日月引力摄动和月球自转均可以忽略;
(3)假设只考虑惯性和引力作用下的稳定的椭圆运动状态,而对于“嫦娥三号”的变轨状态,情况过于复杂,不予以考虑;
(4)制动发动机的最大推力与初始质量之比大于月面引力加速度,并且制动推进系统能够在一定的初始条件下将探测器停于月面上。
问题分析:
嫦娥三号从实施近月制动到成功着陆主要经历了环月轨道→椭圆轨道→着陆轨道三个变轨过程,从环月轨道下降到着陆点的过程,称为软着陆过程,其包括着陆准备轨道、主减速段、快速调整段、粗避障段、精避障段、缓速下降阶段六个阶段。软着陆:指嫦娥三号以相对月球较小的速度着陆,速度一般为几米/每秒; 比冲:火箭发动机单位质量推进剂产生的冲量,或单位流量的推进剂产生的推力。
针对问题1,首先对软着陆过程进行简化分析,可知主减速段终点已基本位于着陆点上方,其空间坐标在月面上投影即为着陆点坐标,仅考虑主减速段着陆过程,可利用主减速段终点逆推出近月点位置。因此,可取嫦娥三号处于主减速段终点时在月球表面的投影点作为原点,软着陆运动轨迹所在平面建立二维坐标系。结合动力学知识,建立最优主减速轨迹模型,并需满足主减速段燃料消耗最小,得到其着陆轨迹微分方程,利用仿真求解得到近月点坐标,运用地表距离与经纬度转化关系,最终得到近月点与远月点地理位置。结合开普勒第二定律和机械能守恒定律,建立两个相关等式,求得近月点、远月点处速度大小,基于最优主减速段轨迹模型求解结果,便可根据近月点运动方向与坐标轴夹角得到速度方向。
针对问题2,确定嫦娥三号着陆轨道及6个阶段的最优控制策略时,始终要满足燃料消耗最小原则。在问题1中已经对近月点及对主减速段的运动情况进行求解,近月点和主减速段终值点的位置、速度及发动机推力大小均已知,在此基础上,给定准备轨道、主减速段最优控制策略。快速调整段主要是对探测器姿态进行调整,采取与主减速同样的建模方法,得到该段质心动力学方程,在满足约束条件及阶段要求下给出具体最优控制策略。对于粗避障段,首先对其数字高程图进行划分,对每个区域的平坦程度进行分析,取最平坦区域作为着陆大致范围。同样需建立动力学模型对运动轨迹进行描述,考虑到可能存在匀速直线运动和先匀加速后又在恒定推力下减速至0两种情况,在可行情况下,选择燃料消耗最少的方案作为最优策略。
针对问题3, 从改变近月点离月球表面的距离和主减速发动机提供的推力两个方面,对嫦娥三号在该段的水平位移、燃料消耗等参数进行灵敏度分析,进而求得近月点离月球表面的距离与该段的水平位移和燃料消耗之间的关系、主减速发动机提供的推力与该段的水平位移及该段的燃料消耗之间的关系;由于嫦娥三号在主减速段水平位移最大,选取该段从对近月点离月球表面的距离变化和主减速发动机提供的推力变化两个角度对模型进行局部阶段误差分析,通过计算每个阶段时间的相对误差对模型进行整体误差分析。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
%% 整个软着陆过程的运动轨迹
clc;clear;close all;
g=1.633; %月球重力加速度
m0=2.4*10^3;%卫星初始质量
Ve=2940; %比冲
theta=9.654*pi/180;%初速度与水平方向的夹角
F=7500; %推力
V0=1692.464; %近日点初速度
t=0; %初始时间
T=0.1; %时间步长
Vx0=V0*cos(-theta); %水平初速度
Vy0=V0*sin(-theta); %竖直初速度
Ay0=g-F*sin(-theta)/(m0-F/Ve*t);%竖直初加速度
Ax0=-F*cos(-theta)/(m0-F/Ve*t);%水平初加速度
count=0;
X_res=Vx0*t+0.5*Ax0*t^2;
Y_res=Vy0*t+0.5*Ax0*t^2;
Result=[];
h=12000;%主减速阶段的下落距离
%% 迭代求 分解速度和分解位移
while (Y_res<h )
count=count+1;
Vx=Vx0+Ax0*T;
Vy=Vy0+Ay0*T;
V_res=sqrt(Vx^2+Vy^2);
Vx0=Vx;
Vy0=Vy;
X=Vx0*T+0.5*Ax0*T^2;
Y=Vy0*T+0.5*Ay0*T^2;
X_res=X_res+X;
Y_res=Y_res+Y;Time=count*T;Result=[Result;X_res,Y_res,V_res,Time];
SIN=Vy/sqrt(Vy^2+Vx^2);
COS=Vx/sqrt(Vy^2+Vx^2);
Ay=g-F*SIN/(m0-F/Ve*Time);
Ax=-F*COS/(m0-F/Ve*Time);
Ax0=Ax;
Ay0=Ay;
end
GJ=[Result(:,1),15000-Result(:,2)];
%%
clc;close all;
Ve=2940;%比冲
g=1.633; %月球重力加速度
h=600;%该阶段的下落距离
t=0; %初始时间
T=0.1; %时间步长
M_temp=[];
V_temp=[];
shijian=[];
X_temp=[];
lisan=1500:100:7500;
%lisan=5000:5100;
for i = lisan
F=i; %推力
%主减速阶段的末状态量作为快速调整阶段的初状态量
theta=55.6708*pi/180;%初速度与水平面的夹角
Vx0=32.23327;%水平初速度
Vy0=47.2005; %竖直初速度
m0=1325.255;%初始质量
Ay0=g-F*sin(theta)/(m0-F/Ve*t);%竖直初加速度
Ax0=-F*cos(theta)/(m0-F/Ve*t);%水平初加速度
count=0; %计数器
X_res=Vx0*t+0.5*Ax0*t^2;
Y_res=Vy0*t+0.5*Ax0*t^2;
Result=[];%% 迭代求 分解速度和分解位移
while (Y_res<h )
count=count+1;
Vx=Vx0+Ax0*T;
Vy=Vy0+Ay0*T;
Vx0=Vx;
Vy0=Vy;
X=Vx0*T+0.5*Ax0*T^2;
Y=Vy0*T+0.5*Ay0*T^2;
X_res=X_res+X;
Y_res=Y_res+Y;Time=count*T;
SIN=Vy/sqrt(Vy^2+Vx^2);
COS=Vx/sqrt(Vy^2+Vx^2);
Ay=g-F*SIN/(m0-F/Ve*Time);
Ax=-F*COS/(m0-F/Ve*Time);
Ax0=Ax;
Ay0=Ay;
end
M=m0-F/Ve*Time;%该阶段的末质量。
X_res; %水平位移Time=count*T; %运动时间V_res=sqrt(Vx^2+Vy^2);%合速度jiaodu=atan(Vy/Vx)*180/pi; %末速度角度%Vx %水平速度
M_temp=[M_temp;F/Ve*Time];
V_temp=[V_temp;V_res,Vx];
shijian=[shijian;Time];%记录运行时间
X_temp=[X_temp;X_res];
end
Answer=[lisan',M_temp,V_temp,shijian,X_temp];%结果总结在这里
M_temp=[];
V_temp=[];
shijian=[];
F=5085; %推力
%主减速阶段的末状态量作为快速调整阶段的初状态量
theta=55.6708*pi/180;%初速度与水平面的夹角
Vx0=32.23327;%水平初速度
Vy0=47.2005; %竖直初速度
m0=1325.255; %初始质量
Ay0=g-F*sin(theta)/(m0-F/Ve*t);%竖直初加速度
Ax0=-F*cos(theta)/(m0-F/Ve*t); %水平初加速度
count=0; %计数器
X_res=Vx0*t+0.5*Ax0*t^2;
Y_res=Vy0*t+0.5*Ax0*t^2;
Result=[];
G=[];
%% 迭代求 分解速度和分解位移
while (Y_res<h )
count=count+1;
Vx=Vx0+Ax0*T;
Vy=Vy0+Ay0*T;
Vx0=Vx;
Vy0=Vy;
X=Vx0*T+0.5*Ax0*T^2;
Y=Vy0*T+0.5*Ay0*T^2;
X_res=X_res+X;
Y_res=Y_res+Y;Time=count*T;
G=[G;X_res,Y_res,V_res,Time];
SIN=Vy/sqrt(Vy^2+Vx^2);
COS=Vx/sqrt(Vy^2+Vx^2);
Ay=g-F*SIN/(m0-F/Ve*Time);
Ax=-F*COS/(m0-F/Ve*Time);
Ax0=Ax;
Ay0=Ay;
end
GJ2=[G(:,1)+GJ(end,1),3000-G(:,2)];
flag1=[377092.173014911,2999.65005894814];%主减速段结束点
flag2=[377381.089941517,2399.99226916603];%快速调整段结束点
GJ3=[GJ;GJ2];
%plot(GJ3(:,1),GJ3(:,2));
hold on;
%plot(flag1(1,1),flag1(1,2),'o','MarkerSize',20);
%plot(flag2(1,1),flag2(1,2),'o','MarkerSize',20);
ttm=2399:-1:100;
CUBI=[zeros(2300,1)+flag2(1,1),ttm'];
GJ4=[GJ3;CUBI];
%plot(GJ4(:,1),GJ4(:,2));
flag3=[377381.089941517,100];%粗避障段结束点
%%
h=70;
aaa=1.98;
T=sqrt(2*h/g);
t1=0.5*T;
t2=t1;
x3=[];
y3=[];
x33=[];for i=0:0.01:t1
x3=[x3;0.5*1.98*i^2];
end
temp5=x3(end,1);
vvv=aaa*t1;for i=0:0.01:t2
x33=[x33;temp5+vvv*i-0.5*aaa*i^2];
end
X3=[x3;x33];
for i=0:0.01:T
y3=[y3;100-0.5*g*i^2];
end
x5=[GJ4(end,1)+X3];
GJ5=[GJ4;x5,y3];
%plot(GJ5(:,1),GJ5(:,2));
ttn=29:-1:0;
TT5=[zeros(30,1)+GJ5(end,1),ttn'];
GJ6=[GJ5;TT5];
plot(GJ6(:,1),GJ6(:,2),'LineWidth',2);
title('后4个过程的轨迹图','FontSize',14);
xlabel('水平位移/米');
ylabel('高度/米');
%axis([377092.173014911,377500,0 3000])
%% 主减速阶段的数值近似求解(用于第一问)
clc;clear;close all;
g=1.633; %月球重力加速度
m0=2.4*10^3;%卫星初始质量
Ve=2940; %比冲
theta=9.654*pi/180;%初速度与水平方向的夹角
F=7500; %推力
V0=1692.464; %近日点初速度
t=0; %初始时间
T=0.1; %时间步长
Vx0=V0*cos(-theta); %水平初速度
Vy0=V0*sin(-theta); %竖直初速度
Ay0=g-F*sin(-theta)/(m0-F/Ve*t);%竖直初加速度
Ax0=-F*cos(-theta)/(m0-F/Ve*t);%水平初加速度
count=0;
X_res=Vx0*t+0.5*Ax0*t^2;
Y_res=Vy0*t+0.5*Ax0*t^2;
Result=[];
h=12000;%主减速阶段的下落距离
%% 迭代求 分解速度和分解位移
while (Y_res<h )
count=count+1;
Vx=Vx0+Ax0*T;
Vy=Vy0+Ay0*T;
V_res=sqrt(Vx^2+Vy^2);
Vx0=Vx;
Vy0=Vy;
X=Vx0*T+0.5*Ax0*T^2;
Y=Vy0*T+0.5*Ay0*T^2;
X_res=X_res+X;
Y_res=Y_res+Y;Time=count*T;Result=[Result;X_res,Y_res,V_res,Time];
SIN=Vy/sqrt(Vy^2+Vx^2);
COS=Vx/sqrt(Vy^2+Vx^2);
Ay=g-F*SIN/(m0-F/Ve*Time);
Ax=-F*COS/(m0-F/Ve*Time);
Ax0=Ax;
Ay0=Ay;
end
M=m0-F/Ve*Time;%该阶段的末质量。
X_res %水平位移Time=count*T %运动时间V_res=sqrt(Vx^2+Vy^2) %合速度jiaodu=atan(Vy/Vx)*180/pi %末速度角度。F/Ve*Time%燃料消耗量
%% 作图
plot(Result(:,1),15000-Result(:,2),'k','LineWidth',2);
title('主减速段嫦娥三号运动轨迹图','FontSize',15);
xlabel('X轴/(m)');
ylabel('Y轴/(m)');
%% 经纬度的近似计算
R=1737.013; %平均半径
weidu=44.12-X_res/((2*pi*R)/4/90)/1000 %近月点纬度
pi*R/180; % 30.3165
%% 主减速阶段的灵敏度分析1。
clc;clear;close all;
g=1.633; %月球重力加速度
m0=2.4*10^3;%卫星初始质量
Ve=2940;%比冲
theta=9.654*pi/180;%初速度与水平方向的夹角
F=7500;%推力
RECORD=[];
lisan=11950:1:12050;
for h=lisan
%主减速阶段的下落距离h
V0=1692.464; %近日点初速度
t=0; %初始时间
T=0.1; %时间步长
Vx0=V0*cos(-theta); %水平初速度
Vy0=V0*sin(-theta); %竖直初速度
Ay0=g-F*sin(-theta)/(m0-F/Ve*t);%竖直初加速度
Ax0=-F*cos(-theta)/(m0-F/Ve*t);%水平初加速度
count=0;
X_res=Vx0*t+0.5*Ax0*t^2;
Y_res=Vy0*t+0.5*Ax0*t^2;
Result=[];%% 迭代求 分解速度和分解位移
while (Y_res<h )
count=count+1;
Vx=Vx0+Ax0*T;
Vy=Vy0+Ay0*T;
V_res=sqrt(Vx^2+Vy^2);
Vx0=Vx;
Vy0=Vy;
X=Vx0*T+0.5*Ax0*T^2;
Y=Vy0*T+0.5*Ay0*T^2;
X_res=X_res+X;
Y_res=Y_res+Y;Time=count*T;Result=[Result;X_res,Y_res,V_res,Time];
SIN=Vy/sqrt(Vy^2+Vx^2);
COS=Vx/sqrt(Vy^2+Vx^2);
Ay=g-F*SIN/(m0-F/Ve*Time);
Ax=-F*COS/(m0-F/Ve*Time);
Ax0=Ax;
Ay0=Ay;
end
M=m0-F/Ve*Time;%该阶段的末质量。
%X_res %水平位移Time=count*T; %运动时间V_res=sqrt(Vx^2+Vy^2) ;%合速度jiaodu=atan(Vy/Vx)*180/pi;%末速度角度。consume=F/Ve*Time;%燃料消耗量RECORD=[RECORD;h,consume,M,Time,V_res,X_res,jiaodu];
end
flag=320;
str={'主减速燃料消耗关于h变化图','主减速阶段末质量关于h变化图','主减速阶段总时间关于h变化图','主减速阶段末速度关于h变化图','主减速阶段水平位移关于h变化图','末速度alpha关于h变化图'};
for i=1:6flag=flag+1;subplot(flag);plot(lisan,RECORD(:,i+1),'*');title(str(i));
end
%% 各阶段时间相对误差
Fact=[487 16 125 22 19]; %实际值
Value=[421.3 24.4 62.1 9.26 3.44];%模型值
cha=abs(Fact-Value);
XD=cha./Fact;
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
相关文章:

2014年国赛高教杯数学建模A题嫦娥三号软着陆轨道设计与控制策略解题全过程文档及程序
2014年国赛高教杯数学建模 A题 嫦娥三号软着陆轨道设计与控制策略 嫦娥三号于2013年12月2日1时30分成功发射,12月6日抵达月球轨道。嫦娥三号在着陆准备轨道上的运行质量为2.4t,其安装在下部的主减速发动机能够产生1500N到7500N的可调节推力,…...

QD1-P25 CSS 背景
本节学习:CSS 背景属性 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p25 背景颜色 背景图片 不重复 横向重复 纵向重复 双向重复 背景图片大小 400px 600px 原图大小 显示器宽度不够时&…...

《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版分片集群》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统&…...

Java利用ChromeDriver插件网页截图(Wondows版+Linux版)
chromedriver是谷歌浏览器驱动,用来模拟谷歌运行操作的一个工具,此处主要讲解Java后端利用此插件进行网页截图,并且适配Linux部署。 环境准备 Wondows服务器或电脑 本机需安装Chrome谷歌浏览器,根据本机浏览器版本,下载对应的chr…...

无人机之交互系统篇
一、系统构成 无人机交互系统通常由多个子系统组成,包括但不限于: 多模式人机交互装置:这是人机交互系统的基础层,通常包括计算机、局域网、传感器等设备,用于实现操作员与无人机之间的数据交互和指令传递。例如&…...

MarsCode--找出数字比例超过n/2的【简单】
问题描述 给定一个长度为n的整型数组,已知其中一个数字的出现次数超过数组长度的一半,找出这个元素 输入格式 一个长度为n的数组,其中某个元素的出现次数大于n/2 输出格式 一个整数 输入样例 [1,3,8,2,3,1,3,3,3] 输出样例 3 数据范…...

Python网络爬虫快速入门指南
Python网络爬虫快速入门指南 网络爬虫,也称为网络蜘蛛,是一种自动访问互联网并提取信息的程序。Python因其简洁明了的语法和丰富的库支持,成为开发网络爬虫的理想选择。在这篇博客中,我们将探讨如何快速入门Python网络爬虫技术&a…...

C86 架构一键离线安装 docker 和 docker-compose 实战指南
C86 架构一键离线安装 docker 和 docker-compose 实战指南 文章目录 C86 架构一键离线安装 docker 和 docker-compose 实战指南一 磁盘挂载二 docker 部署1 上传安装包2 解压安装包3 安装包 docker 三 验证安装四 清除安装包五 安装包下载地址 本文提供了在 C86 架构环境下&…...

【LwIP源码学习2】调试输出相关宏
前言 本文对lwip中debug.h文件里的调试相关宏进行分析。 正文 debug.h中有3个重要的调试相关宏: LWIP_ASSERT(message, assertion) LWIP_ERROR(message, expression, handler) LWIP_DEBUGF(debug, message) 断言 LWIP_ASSERT(message, assertion) 源代码为&…...

Python 列表专题:删除元素
Python 是一种强大的编程语言,广泛应用于数据分析、Web 开发、人工智能等多个领域。而列表(List)作为 Python 中最基本的数据结构之一,扮演着非常重要的角色。列表不仅可以存储各种类型的数据,还提供了丰富的操作接口,方便我们进行数据的增删改查。本篇博文将深入探讨 Py…...

Spring Boot 快速入门与核心原理详解
引言 在上一篇文章中,我们详细探讨了 Spring 框架中的事件监听与发布机制。本文将转向 Spring Boot,介绍如何快速入门 Spring Boot,并深入探讨其核心原理。Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化 Spring 应用的初…...

UniApp 与微信小程序详细对比
UniApp 与微信小程序详细对比 1. 开发环境 微信小程序: 主要使用微信开发者工具提供模拟器、调试工具和性能监控只能开发微信小程序 UniApp: 主要使用 HBuilderX,但也支持 VS Code 等其他编辑器HBuilderX 提供可视化界面、代码提示、调试工…...

【用大模型提示工程处理NLP任务】
Batch API Prompt 工程 任务一:文本分类 任务二:情感分析 任务三:文档处理 任务四:信息抽取 任务五:机器翻译 任务六:生成任务 任务七:文本纠错 Batch API Prompt 工程 Batch API 适用于…...

适配器模式、代理模式(C++)
适配器模式: 定义:适配器模式是一种结构型设计模式,它允许接口不兼容的类一起工作。它通过将一个类的接口转换成客户端期望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 代理模式: 定义&a…...

unity 2d 近战攻击判定的三种方式以及精确获取碰撞点
精确获取碰撞点 核心是获取武器碰撞盒最顶点,然后获取敌人碰撞盒距离该点最近的点 /// <summary>/// 获取获取武器前端位置 碰撞盒最左或最右顶点/// </summary>/// <param name"collider"></param>/// <param name"…...

矩形函数的傅里叶变换——从一维到二维,从连续到离散
一维连续矩形函数的傅里叶变换 二维连续矩形函数的傅里叶变换 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P109 2D DFT 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系…...

潜水打捞系统助力,破解汽车打捞难题
随着人类活动的不断扩展,汽车落水事故频发,成为救援工作中的一大难题。汽车因其重量和结构特性,一旦沉入水体,打捞工作将面临巨大挑战。传统的打捞方法往往效率低下,且在操作过程中可能会对汽车造成进一步的损害&#…...

【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5 Note: 草稿状态,持续更新中,如果有感兴趣,欢迎关注。。。 0. 论文信息 article{lecun1998gradient, title{Gradient-based learning applied to document r…...

LeetCode 每日一题 2024/10/7-2024/10/13
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 10/7 871. 最低加油次数10/8 1436. 旅行终点站10/9 3171. 找到按位或最接近 K 的子数组10/10 3162. 优质数对的总数 I10/11 3164. 优质数对的总数 II10/12 3158. 求出出现两…...

ZYNQ使用XGPIO驱动外设模块(前半部分)
目录 目录 一、新建BD文档,添加ZYNQ处理器 1.BD文档: 2.在Vivado中,BD文件的生成过程通常包括以下步骤: 1)什么是Tcl Console: 3.PL部分是FPGA可编程逻辑部分,它提供了丰富的IO资源,可以用于实现各种硬件接口和功…...

【FastAdmin】全栈视角下的页面跳转实现:从原生html、javascrpt、php技术到jQuery、FastAdmin框架
全栈视角下的页面跳转实现:从原生html、javascrpt、php技术到jQuery、FastAdmin框架 1 引言 页面跳转是Web开发中的基本操作,不同的技术栈提供了不同的实现方法。本文将详细介绍在原生JavaScript、原生HTML、原生PHP、jQuery以及FastAdmin框架中实现页…...

从零开始搭建一个node.js后端服务项目
目录 一、下载node.js及配置环境 二、搭建node.js项目及安装express框架 三、集成nodemon,实现代码热部署 四、Express 应用程序生成器 一、下载node.js及配置环境 网上很多安装教程,此处就不再赘述了 版本信息 C:\Users\XXX>node -v v20.15.0…...

自定义注解和组件扫描在Spring Boot中动态注册Bean(一)
博客主页: 南来_北往 系列专栏:Spring Boot实战 在Spring Boot中,自定义注解和组件扫描是两种强大的机制,它们允许开发者以声明性的方式动态注册Bean。这种方式不仅提高了代码的可读性和可维护性,还使得Spring Boot应用的…...

如何在 IDEA 中导入 Java 项目的 Git 仓库并启动
目录 前言1. 从 Git 仓库导入 Java 项目2. 配置 Maven2.1 配置 Maven 仓库和设置文件2.2 加载依赖 3. 配置 Tomcat 并运行项目3.1 配置 Tomcat3.2 配置 Server URL3.3 启动项目 4. 常见问题与解决方法4.1 Maven 依赖无法下载4.2 Tomcat 部署失败4.3 项目启动后无法访问 结语 前…...

BIO与NIO学习
BIO:同步阻塞IO,客户端一个连接请求(socket)对应一个线程。阻塞体现在: 程序在执行I/O操作时会阻塞当前线程,直到I/O操作完成。在线程空闲的时候也无法释放用于别的服务只能等当前绑定的客户端的消息。 BIO的代码实现 …...

麒麟操作系统:解决umount命令卸载USB存储设备时报“device is busy”错误
麒麟操作系统:解决umount命令卸载USB存储设备时报“device is busy”错误 1、问题描述2、问题解决方法步骤1:尝试强制卸载步骤2:查找占用设备的进程步骤3:终止占用进程步骤4:卸载USB设备 💐The Begin&#…...

Git客户端使用之TortoiseGit和Git
git客户端有两个分别是TortoiseGit和Git Git用于命令行TortoiseGit用于图形界面。无论是Git还是TortoisGit都需要生成公/私钥与github/gitlab建立加密才能使用。 一、先介绍Git的安装与使用 1、下载与安装 安装Git-2.21.0-64-bit.exe(去官网下载最新版64位的),安…...

regionprops函数详解及应用
一、regionprops函数及应用 regionprops 函数在 MATLAB 中是一个强大的工具,用于计算和分析二值图像(或更一般地说,标注矩阵)中连通区域的属性。当处理二值图像时,连通区域通常对应于图像中的前景对象,而背…...

FPAG学习(5)-三种方法实现LED流水灯
目录 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 1.1.2仿真代码 1.1.3仿真 1.2实验结果 1.2.1总结 2.循环移位实现LED流水灯 3.38译码器实现LED流水灯 3.1原理 3.2源程序 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 利用计数器计数到…...

科迅网络阅卷系统存在存储型XSS漏洞
漏洞描述 科迅网络阅卷系统存在存储型XSS漏洞,在项目列表添加项目的地方没有过滤用户的输入 漏洞复现 FOFA "科迅网络阅卷系统" POC <script>alert(/xss/)</script> <h1>1</h1>...