用matlab代码实现零时刻绕地运行且轨道半径为7000km的服务星通过霍曼转移,向零时刻绕地运行且轨道半径为8000km的目标星运行并相遇,最终服务星与目标星同轨道运动同方向一起运动,服务星与目标星还有地球都视为质点,画出服务星与目标星的椭圆形的运动轨迹图,并画出过程中时间与服务星与目标星相对距离减少过程的图
时间: 2023-12-03 17:44:54 浏览: 7
以下用Matlab代码实现的零时刻绕地运行且轨道半径为7000km的服务星通过霍曼转移,向零时刻绕地运行且轨道半径为8000km的目标星运行并相遇,最终服务星与目标星同轨道运动同方向一起运动,服务星与目标星还有地球都视为质点,画出服务星与目标星的椭圆形的运动轨迹图,并画出过程中时间与服务星与目标星相对距离减少过程的图的代码:
```matlab
% 常数定义
mu = 3.986004418e14; % 地球引力常数
R_e = 6378.137e3; % 地球半径
h_1 = 7000e3; % 服务星初始轨道高度
h_2 = 8000e3; % 目标星初始轨道高度
a_1 = h_1 + R_e; % 服务星初始轨道半长轴
a_2 = h_2 + R_e; % 目标星初始轨道半长轴
v_cir_1 = sqrt(mu/a_1); % 服务星初始圆形轨道速度
v_cir_2 = sqrt(mu/a_2); % 目标星初始圆形轨道速度
% 霍曼转移计算
a_t = (a_1 + a_2) / 2; % 目标转移椭圆半长轴
delta_V_1 = sqrt(mu / a_1) * (sqrt(2 * a_t / (a_1 + a_t)) - 1); % 第一次速度增量
delta_V_2 = sqrt(mu / a_2) * (1 - sqrt(2 * a_t / (a_2 + a_t))); % 第二次速度增量
v_1 = v_cir_1 + delta_V_1; % 服务星初始速度
v_2 = v_cir_2 + delta_V_2; % 目标星初始速度
% 计算周期、离心率、半短轴和半焦距
T = 2 * pi * sqrt(a_t^3 / mu); % 转移椭圆轨道周期
e_t = (a_2 - a_1) / (a_2 + a_1); % 转移椭圆离心率
b_t = a_t * sqrt(1 - e_t^2); % 转移椭圆半短轴
f_t = a_t * e_t; % 转移椭圆半焦距
% 计算相对位置和速度
r_1 = [a_1; 0; 0]; % 服务星初始位置
r_2 = [f_t + a_1; 0; 0]; % 目标星初始位置
v_1_vec = [0; v_1; 0]; % 服务星初始速度向量
v_2_vec = [0; v_2; 0]; % 目标星初始速度向量
v_r = v_2_vec - v_1_vec; % 相对速度
r_r = r_2 - r_1; % 相对位置
% 计算轨迹
N = 500; % 采样点数量
t_list = linspace(0, T, N);
r_list = zeros(3, N);
for i = 1:N
t = t_list(i);
E = 2 * atan(sqrt((1 - e_t) / (1 + e_t)) * tan(t/2));
M = E - e_t * sin(E);
nu = 2 * atan(sqrt((1 + e_t) / (1 - e_t)) * tan(t/2));
r = a_t * (1 - e_t * cos(E));
r_list(:, i) = [r * cos(nu); r * sin(nu); 0];
end
% 计算相对位置随时间变化的图像
r_r_list = zeros(1, N);
for i = 1:N
r_r_list(i) = norm(r_list(:, i) - r_1' - r_r');
end
% 绘制图像
figure(1);
hold on;
plot3(r_list(1,:), r_list(2,:), r_list(3,:), 'LineWidth', 1.5);
plot3([0, r_r(1)], [0, r_r(2)], [0, r_r(3)], 'r', 'LineWidth', 2);
plot3(r_r(1), r_r(2), r_r(3), 'ro', 'MarkerSize', 8, 'LineWidth', 2);
plot3(0, 0, 0, 'ko', 'MarkerSize', 8, 'LineWidth', 2);
plot3(r_1(1), r_1(2), r_1(3), 'bo', 'MarkerSize', 8, 'LineWidth', 2);
plot3(r_2(1), r_2(2), r_2(3), 'go', 'MarkerSize', 8, 'LineWidth', 2);
grid on;
axis equal;
xlabel('x');
ylabel('y');
zlabel('z');
legend('服务星轨迹', '相对位置', '相遇点', '地球', '服务星', '目标星');
figure(2);
plot(t_list, r_r_list);
xlabel('时间 (s)');
ylabel('相对距离 (m)');
grid on;
```
其中,第一个图为服务星和目标星的运动轨迹图,第二个图为时间与服务星和目标星的相对距离减少过程的图。