因为有小伙伴想要那个元素星历数据(格式是.txt),我早已经删除了的,后面又找老师要了一份,数据链接放在评论区里面了!!

import java.io.*;class WXXl {static double u =3.986004418E14;static double OMGe = 7.2921150E-5;static double toe = 442800;static double toc = 442800;static double C =2.99792458E8;static double F = (-2) * Math.sqrt(u) / (C * C);static int horse = 115875;static double tk = horse * 3600 - (689 * 7 * 24 * 3600 + toe);public static void main(String[] args) throws IOException {double[][] a = 读入参数(new File("整理过的星历路径,没有表头,直接就是要读取的数据"));计算(a);}public static void 计算(double[][] XL)throws IOException {for (int i = 0; i < XL.length; i++) {double Xk=0,Xgk=0,Xk1=0,Yk=0,Ygk=0,Yk1=0,Zk=0,Zgk=0,Zk1=0;for (int j = 0; j < XL[0].length; j++) {double A = Math.pow(XL[i][0], 2);double e = XL[i][1];double i0 = XL[i][2];double OMG0 = XL[i][3];double w = XL[i][4];double M0 = XL[i][5];double DLTn = XL[i][6];double OMG点 = XL[i][7];double idot = XL[i][8];double Crs = XL[i][9];double Crc = XL[i][10];double Cus = XL[i][11];double Cuc = XL[i][12];double Cis = XL[i][13];double Cic = XL[i][14];double a0 = XL[i][15];double a1 = XL[i][16];double n0 = Math.sqrt(u / (A * A * A));double n = n0 + DLTn;double Mk = M0 + n * tk;double Ek = 0.0;double delt=0.0;int temp = 0, CS = 0;//计算Ekdo {delt=Ek;Ek = Mk +  e * Math.sin(delt);} while (Ek-delt>=10E-12);double vk=0;double sinvk=Math.sqrt(1 - e * e) * Math.sin(Ek);double cosvk=(Math.cos(Ek) - e);if(sinvk > 0 && cosvk > 0) {vk = Math.atan(sinvk/cosvk);}if(sinvk > 0 && cosvk < 0) {vk = Math.PI+Math.atan(sinvk/cosvk);System.out.println("2   "+vk);}if(sinvk < 0 && cosvk > 0){vk = Math.PI*2+Math.atan(sinvk/cosvk);System.out.println("3   "+vk);}if(sinvk < 0 && cosvk < 0) {vk = Math.PI+Math.atan(sinvk/cosvk);System.out.println("4   "+vk);}double ok = vk+ w;double $uk = Cus * Math.sin(2 * ok) + Cuc * Math.cos(2 * ok);double $rk = Crs * Math.sin(2 * ok) + Crc * Math.cos(2 * ok);//以下都没有问题double $ik = Cis * Math.sin(2 * ok) + Cic * Math.cos(2 * ok);double uk = ok + $uk;double rk = A * (1 - e * Math.cos(Ek)) + $rk;//计算Z坐标的值double ik = i0 + idot * tk + $ik;double xk = rk * Math.cos(uk);double yk = rk * Math.sin(uk);System.out.println(Mk+"+++"+Ek+"&&&"+ok+"!!!"+$uk+"@@@"+$rk+"###"+$ik+"$$$"+uk+"%%%"+rk+"^^^"+ik+"&&&"+xk+"***"+yk);//计算 MEO/IGSO 卫星在 CGCS2000 坐标系中的坐标double OMGk1 = OMG0 + (OMG点 - OMGe) * ik - OMGe * toe;System.out.println(OMG0+"!!!"+OMG点+"@@@"+OMGe+"###"+toe);Xk = xk * Math.cos(OMGk1) - yk * Math.cos(ik) * Math.sin(OMGk1);Yk = xk * Math.sin(OMGk1) + yk * Math.cos(ik) * Math.cos(OMGk1);Zk = yk * Math.sin(ik);//计算 GEO 卫星在自定义坐标系系中的坐标double OMGk2 = OMG0 + OMG点 * ik - OMGe * toe;Xgk = xk * Math.cos(OMGk2) - yk * Math.cos(ik) * Math.sin(OMGk2);Ygk = xk * Math.sin(OMGk2) + yk * Math.cos(ik) * Math.cos(OMGk2);Zgk = yk * Math.sin(ik);System.out.println(OMGk1+"!!!"+OMGk2);//计算 GEO 卫星在 CGCS2000 坐标系中的坐标double x1 = -5 * 180 / Math.PI;double x2 = OMGe * tk;double[][] Rx = {{1, 0, 0}, {0, Math.cos(x1), Math.sin(x1)}, {0, -Math.sin(x1), Math.cos(x1)}};double[][] Rz = {{Math.cos(x2), Math.sin(x2), 0}, {-Math.sin(x2), Math.cos(x2), 0}, {0, 0, 1}};double[][] C = new double[3][3];for (int i1 = 0; i1 < 3; i1++) {for (int j1 = 0; j1 < 3; j1++) {//矩阵A的行与矩阵B的列相乘求和(k的值与矩阵A的行与矩阵B的列相等)for (int k = 0; k < 3; k++) {C[i1][j1] += Rx[i1][k] * Rz[k][j1];}}}Xk1 = C[0][0] * Xgk + C[0][1] * Ygk + C[0][2] * Zgk;Yk1 = C[1][0] * Xgk + C[1][1] * Ygk + C[1][2] * Zgk;Zk1 = C[2][0] * Xgk + C[2][1] * Ygk + C[2][2] * Zgk;}FileWriter writer = null;writer = new FileWriter("D:\\桌面\\坐标计算结果.txt", true);writer.write("第"+(i+1)+"个星历"+"计算 MEO/IGSO 卫星在 CGCS2000 坐标系中" + "的坐标\n" + "  X:" + Xk + "   Y:" + Yk + "   Z:" + Zk);writer.write("\nGEO 卫星在自定义坐标系系中的坐标\n" + "  X:" + Xgk + "   Y:" + Ygk + "   Z:" + Zgk);writer.write("\n计算 GEO 卫星在 CGCS2000 坐标系中的坐标\n" + "  X:" + Xk1 + "   Y:" + Yk1 + "   Z:" + Zk1+"\n\n");writer.close();System.out.println("第"+(i+1)+"个星历"+"计算 MEO/IGSO 卫星在 CGCS2000 坐标系中" + "的坐标\n" + "  X:" + Xk + "   Y:" + Yk + "   Z:" + Zk);System.out.println("\nGEO 卫星在自定义坐标系系中的坐标\n" + "  X:" + Xgk + "   Y:" + Ygk + "   Z:" + Zgk);System.out.println("\n计算 GEO 卫星在 CGCS2000 坐标系中的坐标\n" + "  X:" + Xk1 + "   Y:" + Yk1 + "   Z:" + Zk1+"\n\n");}}public static double[][] 读入参数(File q) throws IOException {BufferedReader b = new BufferedReader(new FileReader(q));StringBuffer buffer = new StringBuffer();//Stringbuffer是动态字符串数组,可以放很多字符串String value;int a = 0;//统计行数do {value = b.readLine();//循环一次就保存一行字符串(代表着一行像元值)if (value == null)break;System.out.println("第" + (a + 1) + "行: " + value);a++;//保存星历条数buffer.append(value + "\t");//append()是往动态字符串添加新的字符串,每循环一次存一行,两行之间有换行符} while (value != null);System.out.println(buffer);System.out.println("@@@@");String[] temp = buffer.toString().split("\t");//split()首先是一个分隔符,它会把字符串按照split(‘字符’)里的字符把字符串分割成数组,然后存给一个数组对象。double[] number = new double[temp.length]; //temp里面的N个字符串代表各个参数int C = temp.length / a;System.out.println(q + ":有" + a + "条星历数据,每条数据有" + C + "个参数。" + C + "个像元。" + "\n");for (int i = 0; i < temp.length; i++) {number[i] = Double.parseDouble(temp[i]);//字符串数组转换成浮点型数组}double[][] D = new double[a][C];for (int i = 0; i < temp.length; i += C) {for (int j = i; j < i + C; j++) {D[i / C][j - i] = number[j];}}return D;}
}

计算结果距举例:

第1个星历计算得到MEO/IGSO星在CGCS2000坐标系中的坐标:

X:-3234407.4183885325   Y:1.8378662563519806E7   Z:2.073118954620255E7

GEO卫星在自定义坐标系系中的坐标:

X:-3234407.4183885325   Y:1.8378662563519806E7   Z:2.073118954620255E7

GEO卫星在CGCS2000坐标系中的坐标:

X:-3234407.4183885325   Y:-3628648.095331209   Z:-2.746616774551105E7

第2个星历计算得到MEO/IGSO星在CGCS2000坐标系中的坐标:

X:-1.0218648294802241E7   Y:2.5758875303283375E7   Z:-2999318.2048388044

GEO卫星在自定义坐标系系中的坐标:

X:-1.0218648294802241E7   Y:2.5758875303283375E7   Z:-2999318.2048388044

GEO卫星在CGCS2000坐标系中的坐标:

X:-1.0218648294802241E7   Y:-2.302566529907568E7   Z:-1.1930394130912926E7

第3个星历计算得到MEO/IGSO星在CGCS2000坐标系中的坐标:

X:-1.7337644531256896E7   Y:3670879.337492382   Z:2.155766863460922E7

GEO卫星在自定义坐标系系中的坐标:

X:-1.7337644531256896E7   Y:3670879.337492382   Z:2.155766863460922E7

GEO卫星在CGCS2000坐标系中的坐标:

X:-1.7337644531256896E7   Y:9022638.25227477   Z:-1.9919850176109023E7

第4个星历计算得到MEO/IGSO星在CGCS2000坐标系中的坐标:

X:1.3981480365047488E7   Y:2.2873935596407674E7   Z:7715052.2740825

GEO卫星在自定义坐标系系中的坐标:

X:1.3981480365047488E7   Y:2.2873935596407674E7   Z:7715052.2740825

GEO卫星在CGCS2000坐标系中的坐标:

X:1.3981480365047488E7   Y:-1.4638514962557398E7   Z:-1.919512544766027E7

Java读取星历excel数据并计算卫星坐标相关推荐

  1. Java读取批量Excel文件

    Java读取批量Excel文件,并转化为List<Map<String,String>> 1.首先基础知识: 一 :简介 开发中经常会设计到excel的处理,如导出Excel, ...

  2. txt doc rtf html,JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例.docx

    JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例 JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例??2012-06-2 ...

  3. PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

    PLC实验-西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pa ...

  4. R语言批量读取写入Excel数据 r导出输出写入excel多个sheet 导出excel 导入 excel 读入excel 表格

    前一段,写过一篇:R语言中写入Excel的不同sheet表格,最近学习了tidyverse的方法,感觉需要总结一下,更新一下知识结构. 本文准备用实际数据,做一下操作: 「批量读取:」 批量读取多个E ...

  5. 用java把excel数据导入oracle日期转换,Java代码兑现excel数据导入到Oracle

    Java代码实现excel数据导入到Oracle 1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误) 2.代码: import java.io.File; ...

  6. java读取OPC DA数据---Utgard

    java读取OPC DA数据-Utgard Utgard库已经过时,原作者早已删除库,建议使用OPC UA,兼容OPC DA. 下面讲解Utgard使用 C#和C++都不用配置DCOM,直接调用函数 ...

  7. R语言批量读取写入Excel数据

    本文准备用实际数据,做一下操作: 「批量读取:」 批量读取多个Excel数据 批量读取一个Excel数据的不同表格 「批量写入」 批量写入Excel数据 1,批量写入到不同的Excel中 2,批量写入 ...

  8. Java - 批量录入Excel数据优化 (一)

    1.前言 相信批量导入功能在许多应用场景都会使用到.本人在做一次公司需求时,因为需要校验Excel数据唯一性,所以代码变成了这样 for (BlackListInfoExcelDTO excelDTO ...

  9. java怎么读取excel思路_java读取本地excel数据

    一 注解的定义 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参 ...

  10. JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法

    OFFICE文档使用POI控件,PDF可以使用PDFBOX0.7.3控件,完全支持中文,用XPDF也行. java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库 ...

最新文章

  1. 确认!语音识别大牛Daniel Povey将入职小米,曾遭霍普金斯大学解雇,怒拒Facebook
  2. autosar中com模块_详细介绍AUTOSAR各个模块作用PART1(OS,SYS)
  3. python stm32f401_NUCLEO-F401RE(STM32F401RE)开发板跑Micropython平台
  4. 魅族大数据之流平台设计部署实践--转
  5. apache不能解析php文件_Web中间件漏洞之Apache篇
  6. Java 面试题 —— 老田的蚂蚁金服面试经历
  7. svn服务端及客户端搭建和使用(三)
  8. ActiveMQ中的温度,存储和内存使用百分比
  9. zbar扫描无法近距离扫码_生意好时最怕收银出故障,这几个扫码枪的常见问题你一定要知道...
  10. vue开发:顶端粘滞效果的页面
  11. Alpha、Beta、RC、GA、RTM、OEM等版本的解释
  12. java heapdump 分析工具_Heapdump分析软件
  13. redhat7安装Oracle11g数据库全过程
  14. 吴恩达深度学习环境配置
  15. “未来杯”第二届知识图谱锦标赛正式启动
  16. XXL-JOB任务调度
  17. Android中的动画(二)和ButterKnife (黄油刀)
  18. 基础为零?如何将 C++ 编译成 WebAssembly
  19. 1th matlab与遗传算法工具箱
  20. transforms.ToTensor()与transforms.Normalize()函数解析

热门文章

  1. 用project做项目计划及总结报表
  2. Django学习笔记1 Web开发简介和Django安装运行
  3. 基于卷积神经网络的像素级图像融合——硕士论文阅读笔记
  4. 【转】局域网速度测试 三款软件轻松搞定
  5. 推荐10篇2021年服装设计相关毕业论文文献
  6. 融云首席科学家任杰:写在融云 8 周年
  7. fast无线路由器设置服务器,Fast迅捷无线路由器怎么设置 Fast迅捷无线路由器设置方法【详细步骤】...
  8. 戴尔服务器上装vmware esxi
  9. 统一身份认证(CAS)中文文档 请多指教
  10. 计算机安全证书有问题怎么办,此网站的安全证书有问题如何取消 此网站的安全证书有问题解决方法...