一、程序介绍
(1)程序布置:我在创建了一个名为“SatellitePositionCalculationSystem”的包,在包内又创建了一个名为“wx”的类。
(2)开发工具:Eclipse
二、Java源码:
package SatellitePositionCalculationSystem;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
public class wx extends JFrame {
private JPanel contentPane;
private JLabel lblln;
private JLabel lblNewLabel_0;
private JLabel lblNewLabel_1;
private JLabel lblNewLabel_2;
private JLabel lblNewLabel_3;
private JLabel lblNewLabel_4;
private JLabel lblNewLabel_5;
private JLabel lblNewLabel_6;
private JLabel lblNewLabel_7;
private JLabel lblNewLabel_8;
private JLabel lblNewLabel_9;
private JLabel lblNewLabel_10;
private JLabel lblNewLabel_11;
private JLabel lblNewLabel_12;
private JLabel lblNewLabel_13;
private JLabel lblNewLabel_14;
private JLabel lblNewLabel_15;
private JLabel lblNewLabel_16;
private JLabel lbltk;
private JLabel lblNewLabel_17;
private JLabel lbla;
private JLabel lblmk;
private JLabel lblNewLabel_18;
private JLabel lblvk;
private JLabel lblvk1;
private JLabel lblvk2;
private JLabel lblNewLabel_19;
private JLabel lblNewLabel_20;
private JLabel lblNewLabel_21;
private JLabel lblNewLabel_22;
private JLabel lblNewLabel_23;
private JLabel lblNewLabel_24;
private JLabel lblNewLabel_25;
private JLabel lblNewLabel_26;
private JLabel lblNewLabel_27;
private JLabel lblNewLabel_28;
private JLabel lblNewLabel_29;
private JLabel lblNewLabel_30;
private JLabel lblNewLabel_31;
private JLabel lblNewLabel_32;
private JLabel lblNewLabel_33;
private JLabel lblNewLabel_34;
private JLabel lblNewLabel_35;
private JTextField a_1;//a_1是表示sqrtA的变量
private JTextField a__1;//a__1是表示μ的变量
private JTextField ln_2;
private JTextField a0_1;
private JTextField a1_1;
private JTextField a2_1;
private JTextField tk_1;
private JTextField u_2;
private JTextField n_2;
private JTextField n0_2;
private JTextField toc_1;
private JTextField t1_1;
private JTextField toe_1;
private JTextField M0_1;
private JTextField e_1;
private JTextField Mk_1;
private JTextField Ek_1;
private JTextField Vk_1;
private JTextField Vk1_1;
private JTextField Vk2_1;
private JTextField w_1;
private JTextField u0_1;
private JTextField Crs_1;
private JTextField Crc_1;
private JTextField Cuc_1;
private JTextField Cus_1;
private JTextField Cic_1;
private JTextField Cis_1;
private JTextField i0_1;
private JTextField I_1;
private JTextField u_k_1;
private JTextField r_k_1;
private JTextField i_k_1;
private JTextField uk_1;
private JTextField rk_1;
private JTextField ik_1;
private JTextField xk_1;
private JTextField yk_1;
private JTextField omega_1;
private JTextField omega0_1;
private JTextField we_1;
private JTextField omegak_1;
private JTextField xk1_1;
private JTextField yk1_1;
private JTextField zk1_1;
/*
* 启动程序代码部分
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
wx frame = new wx();
frame.setVisible(true);
frame.setTitle(" 卫星位置计算小程序(Java版) ");//程序名称
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
*创建主体框架
*/
public wx() {
//窗口设置
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1144, 721);//窗口大小
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//第一部分:结果输入
//sqrtA部分
JLabel lblasqrt = new JLabel("sqrtA:\r\n");
lblasqrt.setBounds(34, 26, 203, 21);
contentPane.add(lblasqrt);
//sqrtA的填空模块设置
a_1 = new JTextField();
a_1.setBounds(137, 26, 183, 21);//填空位置大小
contentPane.add(a_1);
a_1.setColumns(10);//设置填空的最大字符数为10
//摄政改正数Deltan部分
lblln = new JLabel("Deltan:");
lblln.setBounds(34, 66, 203, 15);
contentPane.add(lblln);
//摄政改正数Deltan的填空模块设置
ln_2 = new JTextField();
ln_2.setColumns(10);
ln_2.setBounds(137, 61, 183, 21);
contentPane.add(ln_2);
//椭球引力常数μ部分
lblNewLabel_17 = new JLabel("μ:");
lblNewLabel_17.setBounds(34, 100, 203, 15);
contentPane.add(lblNewLabel_17);
//椭球引力常数μ的填空模块设置
u_2 = new JTextField();
u_2.setColumns(10);
u_2.setBounds(137, 96, 183, 21);
contentPane.add(u_2);
//卫星钟飘参数a0部分
lblNewLabel_1 = new JLabel("a0:");
lblNewLabel_1.setBounds(34, 137, 203, 15);
contentPane.add(lblNewLabel_1);
//卫星钟飘参数a0的填空模块设置
a0_1 = new JTextField();
a0_1.setColumns(10);
a0_1.setBounds(137, 131, 183, 21);
contentPane.add(a0_1);
//卫星钟飘参数a1部分
lblNewLabel_2 = new JLabel("a1:");
lblNewLabel_2.setBounds(34, 168, 203, 15);
contentPane.add(lblNewLabel_2);
//卫星钟飘参数a1的填空模块设置
a1_1 = new JTextField();
a1_1.setColumns(10);
a1_1.setBounds(137, 166, 183, 21);
contentPane.add(a1_1);
//卫星钟飘参数a2部分
lblNewLabel_3 = new JLabel("a2:");
lblNewLabel_3.setBounds(34, 202, 203, 15);
contentPane.add(lblNewLabel_3);
//卫星钟飘参数a2的填空模块设置
a2_1 = new JTextField();
a2_1.setColumns(10);
a2_1.setBounds(137, 201, 183, 21);
contentPane.add(a2_1);
//toc部分
lblNewLabel_4 = new JLabel("toc:");
lblNewLabel_4.setBounds(34, 236, 203, 15);
contentPane.add(lblNewLabel_4);
//toc的填空模块设置
toc_1 = new JTextField();
toc_1.setBounds(137, 236, 183, 21);
contentPane.add(toc_1);
toc_1.setColumns(10);
//toe部分
lblNewLabel_7 = new JLabel("toe:");
lblNewLabel_7.setBounds(34, 270, 203, 15);
contentPane.add(lblNewLabel_7);
//toe的填空模块部分
toe_1 = new JTextField();
toe_1.setColumns(10);
toe_1.setBounds(137, 271, 183, 21);
contentPane.add(toe_1);
//t'部分
lblNewLabel_8 = new JLabel("t':");
lblNewLabel_8.setBounds(390, 32, 109, 15);
contentPane.add(lblNewLabel_8);
//t'的填空模块部分
t1_1 = new JTextField();
t1_1.setBounds(489, 29, 207, 21);
contentPane.add(t1_1);
t1_1.setColumns(10);
//M0部分
lblNewLabel_6 = new JLabel("M0:");
lblNewLabel_6.setBounds(390, 67, 109, 15);
contentPane.add(lblNewLabel_6);
//M0的填空模块部分
M0_1 = new JTextField();
M0_1.setBounds(489, 64, 207, 21);
contentPane.add(M0_1);
M0_1.setColumns(10);
//轨道离心率e部分
lblNewLabel_5 = new JLabel("e:");
lblNewLabel_5.setBounds(390, 102, 109, 15);
contentPane.add(lblNewLabel_5);
//轨道离心率e的填空模块部分
e_1 = new JTextField();
e_1.setColumns(10);
e_1.setBounds(489, 99, 207, 21);
contentPane.add(e_1);
//ω近地点角距部分
lblNewLabel_12 = new JLabel("ω近地点角距:");
lblNewLabel_12.setBounds(390, 137, 109, 15);
contentPane.add(lblNewLabel_12);
//ω近地点角距的填空模块部分
w_1 = new JTextField();
w_1.setBounds(489, 134, 207, 21);
contentPane.add(w_1);
w_1.setColumns(10);
//Crs部分
lblNewLabel_11 = new JLabel("Crs:");
lblNewLabel_11.setBounds(390, 172, 109, 15);
contentPane.add(lblNewLabel_11);
//Crs的填空模块部分
Crs_1 = new JTextField();
Crs_1.setColumns(10);
Crs_1.setBounds(489, 169, 207, 21);
contentPane.add(Crs_1);
//Crc部分
lblNewLabel_20 = new JLabel("Crc:");
lblNewLabel_20.setBounds(390, 207, 109, 15);
contentPane.add(lblNewLabel_20);
//Crc的填空模块部分
Crc_1 = new JTextField();
Crc_1.setColumns(10);
Crc_1.setBounds(489, 204, 207, 21);
contentPane.add(Crc_1);
//Cuc部分
lblNewLabel_21 = new JLabel("Cuc:");
lblNewLabel_21.setBounds(390, 242, 109, 15);
contentPane.add(lblNewLabel_21);
//Cuc的填空模块部分
Cuc_1 = new JTextField();
Cuc_1.setColumns(10);
Cuc_1.setBounds(489, 239, 207, 21);
contentPane.add(Cuc_1);
//Cus部分
lblNewLabel_22 = new JLabel("Cus:");
lblNewLabel_22.setBounds(390, 277, 109, 15);
contentPane.add(lblNewLabel_22);
//Cus的填空模块部分
Cus_1 = new JTextField();
Cus_1.setColumns(10);
Cus_1.setBounds(489, 274, 207, 21);
contentPane.add(Cus_1);
//Cic部分
lblNewLabel_10 = new JLabel("Cic:");
lblNewLabel_10.setBounds(772, 32, 154, 15);
contentPane.add(lblNewLabel_10);
//Cic的填空模块部分
Cic_1 = new JTextField();
Cic_1.setColumns(10);
Cic_1.setBounds(874, 26, 207, 21);
contentPane.add(Cic_1);
//Cis部分
lblNewLabel_9 = new JLabel("Cis:");
lblNewLabel_9.setBounds(772, 68, 154, 15);
contentPane.add(lblNewLabel_9);
//Cis的填空模块部分
Cis_1 = new JTextField();
Cis_1.setColumns(10);
Cis_1.setBounds(874, 62, 207, 21);
contentPane.add(Cis_1);
//I0部分
lblNewLabel_16 = new JLabel("I0:");
lblNewLabel_16.setBounds(772, 104, 164, 15);
contentPane.add(lblNewLabel_16);
//I0的填空模块部分
i0_1 = new JTextField();
i0_1.setColumns(10);
i0_1.setBounds(874, 98, 207, 21);
contentPane.add(i0_1);
//I部分
lblNewLabel_15 = new JLabel("I:");
lblNewLabel_15.setBounds(772, 140, 164, 15);
contentPane.add(lblNewLabel_15);
//I的填空模块部分
I_1 = new JTextField();
I_1.setColumns(10);
I_1.setBounds(874, 134, 207, 21);
contentPane.add(I_1);
//Ω部分
lblNewLabel_29 = new JLabel("Ω:");
lblNewLabel_29.setBounds(772, 176, 164, 15);
contentPane.add(lblNewLabel_29);
//Ω的填空模块部分
omega_1 = new JTextField();
omega_1.setBounds(874, 170, 207, 21);
contentPane.add(omega_1);
omega_1.setColumns(10);
//Ω0部分
lblNewLabel_30 = new JLabel("Ω0:");
lblNewLabel_30.setBounds(772, 212, 164, 15);
contentPane.add(lblNewLabel_30);
//Ω0的填空模块部分
omega0_1 = new JTextField();
omega0_1.setColumns(10);
omega0_1.setBounds(874, 206, 207, 21);
contentPane.add(omega0_1);
//ω地球角速度部分
lblNewLabel_31 = new JLabel("ω地球角速度:");
lblNewLabel_31.setBounds(772, 248, 264, 15);
contentPane.add(lblNewLabel_31);
//ω地球角速度的填空模块部分
we_1 = new JTextField();
we_1.setColumns(10);
we_1.setBounds(874, 242, 207, 21);
contentPane.add(we_1);
//第二部分:结果输出
//卫星轨迹半长轴a部分
lbla = new JLabel("卫星轨道的半长轴a:");
lbla.setBounds(34, 395, 172, 15);
contentPane.add(lbla);
//卫星轨迹半长轴a的填空模块部分
a__1 = new JTextField();
a__1.setBounds(187, 389, 183, 21);//填空位置
contentPane.add(a__1);
a__1.setColumns(10);
//卫星平均角速度n0部分
JLabel lblNewLabel_0 = new JLabel("卫星平均角速度n0:");
lblNewLabel_0.setBounds(34, 437, 172, 15);
contentPane.add(lblNewLabel_0);
//卫星平均角速度n0的填空模块设置
n0_2 = new JTextField();
n0_2.setBounds(187, 431, 183, 21);
contentPane.add(n0_2);
n0_2.setColumns(10);
//计算历元开始时间tk部分
lbltk = new JLabel("历元开始时间tk:");
lbltk.setBounds(34, 479, 172, 15);
contentPane.add(lbltk);
//计算历元开始时间tk的填空模块设置
tk_1 = new JTextField();
tk_1.setColumns(10);
tk_1.setBounds(187, 473, 183, 21);
contentPane.add(tk_1);
//卫星平均角速度n部分
JLabel lblNewLabel = new JLabel("改正后卫星平均角速度n:");
lblNewLabel.setBounds(34, 521, 172, 15);
contentPane.add(lblNewLabel);
//卫星平均角速度的填空模块设置
n_2 = new JTextField();
n_2.setBounds(187, 515, 183, 21);
contentPane.add(n_2);
n_2.setColumns(10);
//平近点角Mk部分
lblmk = new JLabel("平近点角Mk:");
lblmk.setBounds(34, 563, 172, 15);
contentPane.add(lblmk);
//平近点角Mk的填空模块设置
Mk_1 = new JTextField();
Mk_1.setBounds(187, 557, 183, 21);
contentPane.add(Mk_1);
Mk_1.setColumns(10);
//偏近点角Ek部分
lblNewLabel_18 = new JLabel("偏近点角Ek:");
lblNewLabel_18.setBounds(34, 605, 172, 15);
contentPane.add(lblNewLabel_18);
//偏近点角Ek的填空模块设置
Ek_1 = new JTextField();
Ek_1.setBounds(187, 599, 183, 21);
contentPane.add(Ek_1);
Ek_1.setColumns(10);
//cosfk
lblvk2 = new JLabel("cosfk:");
lblvk2.setBounds(395, 395, 54, 15);
contentPane.add(lblvk2);
//cosfk的填空模块设置
Vk2_1 = new JTextField();
Vk2_1.setColumns(10);
Vk2_1.setBounds(489, 389, 207, 21);
contentPane.add(Vk2_1);
//sinfk部分
lblvk1 = new JLabel("sinfk:");
lblvk1.setBounds(395, 437, 54, 15);
contentPane.add(lblvk1);
//sinfk的填空模块设置
Vk1_1 = new JTextField();
Vk1_1.setColumns(10);
Vk1_1.setBounds(489, 431, 207, 21);
contentPane.add(Vk1_1);
//升交距角Фk部分
lblNewLabel_19 = new JLabel("Фk :");
lblNewLabel_19.setBounds(395, 479, 54, 15);
contentPane.add(lblNewLabel_19);
//升交距角的填空模块设置
u0_1 = new JTextField();
u0_1.setBounds(489, 473, 207, 21);
contentPane.add(u0_1);
u0_1.setColumns(10);
//u_k部分
lblNewLabel_23 = new JLabel("δu:");
lblNewLabel_23.setBounds(395, 521, 54, 15);
contentPane.add(lblNewLabel_23);
//u_k的填空模块设置
u_k_1 = new JTextField();
u_k_1.setBounds(489, 515, 207, 21);
contentPane.add(u_k_1);
u_k_1.setColumns(10);
//r_k部分
lblNewLabel_24 = new JLabel("δr:");
lblNewLabel_24.setBounds(395, 563, 54, 15);
contentPane.add(lblNewLabel_24);
//r_k的填空模块设置
r_k_1 = new JTextField();
r_k_1.setColumns(10);
r_k_1.setBounds(489, 557, 207, 21);
contentPane.add(r_k_1);
//i_k部分
lblNewLabel_25 = new JLabel("δi:");
lblNewLabel_25.setBounds(395, 605, 54, 15);
contentPane.add(lblNewLabel_25);
//i_k的填空模块设置
i_k_1 = new JTextField();
i_k_1.setColumns(10);
i_k_1.setBounds(489, 605, 207, 21);
contentPane.add(i_k_1);
//uk部分
lblNewLabel_26 = new JLabel("u':");
lblNewLabel_26.setBounds(775, 395, 62, 15);
contentPane.add(lblNewLabel_26);
//uk的填空模块设置
uk_1 = new JTextField();
uk_1.setColumns(10);
uk_1.setBounds(874, 389, 207, 21);
contentPane.add(uk_1);
//rk部分
lblNewLabel_27 = new JLabel("r:");
lblNewLabel_27.setBounds(775, 437, 62, 15);
contentPane.add(lblNewLabel_27);
//rk的填空模块设置
rk_1 = new JTextField();
rk_1.setColumns(10);
rk_1.setBounds(874, 431, 207, 21);
contentPane.add(rk_1);
//ik部分
lblNewLabel_28 = new JLabel("i:");
lblNewLabel_28.setBounds(775, 479, 62, 15);
contentPane.add(lblNewLabel_28);
//ik的填空模块设置
ik_1 = new JTextField();
ik_1.setColumns(10);
ik_1.setBounds(874, 473, 207, 21);
contentPane.add(ik_1);
//Ωk的部分
lblNewLabel_32 = new JLabel("Ω:");
lblNewLabel_32.setBounds(775, 521, 62, 15);
contentPane.add(lblNewLabel_32);
//Ωk的填空模块设置
omegak_1 = new JTextField();
omegak_1.setColumns(10);
omegak_1.setBounds(874, 515, 207, 21);
contentPane.add(omegak_1);
//Xk的部分
lblNewLabel_14 = new JLabel("x轨道:");
lblNewLabel_14.setBounds(775, 563, 62, 15);
contentPane.add(lblNewLabel_14);
//Xk的填空模块设置
xk_1 = new JTextField();
xk_1.setColumns(10);
xk_1.setBounds(874, 560, 207, 21);
contentPane.add(xk_1);
//Yk的部分
lblNewLabel_13 = new JLabel("y轨道:");
lblNewLabel_13.setBounds(775, 605, 62, 15);
contentPane.add(lblNewLabel_13);
//Yk的填空模块设置
yk_1 = new JTextField();
yk_1.setColumns(10);
yk_1.setBounds(874, 605, 207, 21);
contentPane.add(yk_1);
//X的部分
lblNewLabel_33 = new JLabel("X:");
lblNewLabel_33.setBounds(90, 589, 62, 145);
contentPane.add(lblNewLabel_33);
//Xk1的填空模块设置
xk1_1 = new JTextField();
xk1_1.setColumns(10);
xk1_1.setBounds(135, 645, 237, 31);
contentPane.add(xk1_1);
//Y的部分
lblNewLabel_34 = new JLabel("Y:");
lblNewLabel_34.setBounds(426, 611, 162, 100);
contentPane.add(lblNewLabel_34);
//Yk1的填空模块设置
yk1_1 = new JTextField();
yk1_1.setColumns(10);
yk1_1.setBounds(469, 646, 245, 31);
contentPane.add(yk1_1);
//Z的部分
lblNewLabel_35 = new JLabel("Z:");
lblNewLabel_35.setBounds(755, 653, 342, 15);
contentPane.add(lblNewLabel_35);
//Zk1的填空模块设置
zk1_1 = new JTextField();
zk1_1.setColumns(10);
zk1_1.setBounds(794, 645, 237, 31);
contentPane.add(zk1_1);
JButton btnNewButton1 = new JButton("点击此处自动填充示例数据");//计算按钮的设置
btnNewButton1.setActionCommand("btnNewButton1");
btnNewButton1.setFont(new Font("SimSun", Font.PLAIN, 10));
btnNewButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
a_1 = new JTextField("5153.7127704599998");
ln_2 = new JTextField("4.1115998360700002e-009");
u_2 = new JTextField("3.986005e14");
a0_1 = new JTextField("0.00028600683435800001");
a1_1 = new JTextField("1.7053025658199999e-012");
a2_1 = new JTextField("0");
toc_1 = new JTextField("0.00000000000000000");
toe_1 = new JTextField("0.00000000000000000");
t1_1 = new JTextField("4800.0");
M0_1 = new JTextField("1.2263973009600000");
e_1 = new JTextField("0.0053100715158500003");
w_1 = new JTextField("-1.6819446292500000");
Crs_1 = new JTextField("-105.43750000000000");
Crc_1 = new JTextField("175.34375000000000");
Cuc_1 = new JTextField("-5.5264681577700003e-006");
Cus_1 = new JTextField("1.1192634701700000e-005");
Cic_1 = new JTextField("-9.6857547759999998e-008");
Cis_1 = new JTextField("-7.8231096267699997e-008");
i0_1 = new JTextField("0.97432927738800001");
I_1 = new JTextField("1.8643633724999999e-010");
omega_1 = new JTextField("-7.7124641122299999e-009");
omega0_1 = new JTextField("-2.9080127721900002");
we_1 = new JTextField("7.2921151467e-5");
}
});
btnNewButton1.setBounds(772, 274, 150, 25);
contentPane.add(btnNewButton1);
JButton btnNewButton2 = new JButton("点击此处手动输入数据");//计算按钮的设置
btnNewButton2.setFont(new Font("SimSun", Font.PLAIN, 10));
btnNewButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnNewButton2.setBounds(932, 274, 150, 25);
contentPane.add(btnNewButton2);
//第三部分:卫星位置计算具体步骤
JButton btnNewButton = new JButton("o(( >ω< ))o> <<<<----请点击此处进行计算,计算过程值及最终结果如下所示:---->>>> <o(* ̄▽ ̄*)o");//计算按钮的设置
btnNewButton.setFont(new Font("SimSun", Font.PLAIN, 18));
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 计算卫星轨道半长轴a
double a_sqrt = Double.parseDouble(a_1.getText().trim());
double a = a_sqrt * a_sqrt;
String Sa = "" + a;
a__1.setText(Sa);
//计算卫星运动的平均角速度n0
double u = Double.parseDouble(u_2.getText().trim());
double n0 = Math.pow(u / Math.pow(a, 3), 0.5);
String Sn0 = "" + n0;
n0_2.setText(Sn0);
// 计算卫星运动的平均角速度n
double ln = Double.parseDouble(ln_2.getText().trim());
//double u = Double.parseDouble(u_2.getText().trim());
//double n0 = Math.pow(u / Math.pow(a, 3), 0.5);
double n = n0 + ln;
String Sn = "" + n;
n_2.setText(Sn);
// 计算规划时间
double toe = Double.parseDouble(toe_1.getText().trim());
double toc = Double.parseDouble(toc_1.getText().trim());
double t1 = Double.parseDouble(t1_1.getText().trim());
double a0 = Double.parseDouble(a0_1.getText().trim());
double a1 = Double.parseDouble(a1_1.getText().trim());
double a2 = Double.parseDouble(a2_1.getText().trim());
double lt = a0 + a1 * (t1 - toc) + a2 * ((t1 - toc) * (t1 - toc));// 计算卫星钟差
double t = t1 - lt;
double tk = t - toe;
String Stk = "" + tk;
tk_1.setText(Stk);
// 计算真近点角
double M0 = Double.parseDouble(M0_1.getText().trim());
double e1 = Double.parseDouble(e_1.getText().trim());
double Mk = M0 + n * tk;
String SMk = "" + Mk;
Mk_1.setText(SMk);
double Ek_old = Mk;
double Ek_new = Mk + e1 * Math.sin(Ek_old);
int i = 1;
while (Math.abs(Ek_new - Ek_old) > 10e-8) {
Ek_old = Ek_new;
Ek_new = Mk + e1 * Math.sin(Ek_old);
i += 1;
if (i > 10)
break;
}
double Ek = Ek_new;
String SEk = "" + Ek;
Ek_1.setText(SEk);
double Vk1 = (Math.pow(1 - e1 * e1, 0.5) * Math.sin(Ek)) / (1 - e1 * Math.cos(Ek));// sinVk
String SVk1 = "" + Vk1;
Vk1_1.setText(SVk1);
double Vk2 = (Math.cos(Ek) - e1) / (1 - e1 * Math.cos(Ek)); // cosVk
String SVk2 = "" + Vk2;
Vk2_1.setText(SVk2);
double Vk;
if (Vk2 == 0) {
if (Vk1 > e1)
Vk = Math.PI / 2;
else
Vk = -Math.PI / 2;
} else {
Vk = Math.atan(Vk1 / Vk2);
if (Vk2 < 0) {
if (Vk1 >= 0)
Vk += Math.PI;
else
Vk -= Math.PI;
}
}
// 计算升交距角
double w = Double.parseDouble(w_1.getText().trim());
double u0 = Vk + w;
String Su0 = "" + u0;
u0_1.setText(Su0);
// 计算经过摄动改正的升交距角uk、卫星的地心距离rk、轨道倾角ik
double Crs = Double.parseDouble(Crs_1.getText().trim());
double Crc = Double.parseDouble(Crc_1.getText().trim());
double Cuc = Double.parseDouble(Cuc_1.getText().trim());
double Cus = Double.parseDouble(Cus_1.getText().trim());
double Cic = Double.parseDouble(Cic_1.getText().trim());
double Cis = Double.parseDouble(Cis_1.getText().trim());
double i0 = Double.parseDouble(i0_1.getText().trim());
double I = Double.parseDouble(I_1.getText().trim());
double u_k = Cus * Math.sin(2 * u0) + Cuc * Math.cos(2 * u0);
double r_k = Crs * Math.sin(2 * u0) + Crc * Math.cos(2 * u0);
double i_k = Cis * Math.sin(2 * u0) + Cic * Math.cos(2 * u0);
String Su_k = "" + u_k;
u_k_1.setText(Su_k);
String Sr_k = "" + r_k;
r_k_1.setText(Sr_k);
String Si_k = "" + i_k;
i_k_1.setText(Si_k);
double uk = u0 + u_k;
double rk = a * (1 - e1 * Math.cos(Ek)) + r_k;
double ik = i0 + i_k + I * tk;
String Suk = "" + uk;
uk_1.setText(Suk);
String Srk = "" + rk;
rk_1.setText(Srk);
String Sik = "" + ik;
ik_1.setText(Sik);
// 计算卫星的轨道平面直角坐标
double xk = rk * Math.cos(uk);
double yk = rk * Math.sin(uk);
String Sxk = "" + xk;
xk_1.setText(Sxk);
String Syk = "" + yk;
yk_1.setText(Syk);
// 坐标转换
double omega = Double.parseDouble(omega_1.getText().trim());
double omega0 = Double.parseDouble(omega0_1.getText().trim());
double we = Double.parseDouble(we_1.getText().trim());
double omegak = omega0 + omega * (t - toe) - we * t;
String Somegak = "" + omegak;
omegak_1.setText(Somegak);
double xk1 = xk * Math.cos(omegak) - yk * Math.cos(ik) * Math.sin(omegak);
double yk1 = xk * Math.sin(omegak) + yk * Math.cos(ik) * Math.cos(omegak);
double zk1 = yk * Math.sin(ik);
String Sxk1 = "" + xk1;
xk1_1.setText(Sxk1);
String Syk1 = "" + yk1;
yk1_1.setText(Syk1);
String Szk1 = "" + zk1;
zk1_1.setText(Szk1);
}
});
btnNewButton.setBounds(30, 326, 1067, 29);
contentPane.add(btnNewButton);
}
}
三、程序运行画面:
注意:
此代码纯自己手打,鉴于经验不足,故此不太完善,如有借用可以在【自动填充示例数据】模块上精益求精,请不要按部就班。