Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.io.*;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- /**
- *
- */
- public class Stdalone {
- static final double We = 7.292115E-5; //WGS-84 predkosc obrotow Ziemi[rad/sec]
- static final double c = 299792458.0; //WGS-84 predkosc swiatla
- static final double pi = 3.1415926535898; //WGS 84 pi;
- static final double Wedot = 7.2921151467E-5; //WGS 84 predkosc obrotow Ziemi [rad/sec] (dokladna)
- static final double mu = 3.986005E+14; //WGS 84 stala grawitacji [m^3/sec^2]
- static final double F = -4.442807633E-10; //korekta relatywistyczna
- static final double a = 6378137.0; //WGS-84 dluzsza polos
- static final double b = 6356752.31; //WGS-84 krotsza polos Ziemi
- static final double e1sqr = (a * a - b * b) / (a * a); //mimosrod
- static final double e2sqr = (a * a - b * b) / (b * b); //mimosrod
- /**
- * ************************************************************************
- */
- public double[] LLA2XYZ(double[] Xi) {
- double N = a / Math.sqrt(1.0 - e1sqr * Math.sin(Xi[0]) * Math.sin(Xi[0]));
- double[] Xo = new double[3];
- Xo[0] = (N + Xi[2]) * Math.cos(Xi[0]) * Math.cos(Xi[1]);
- Xo[1] = (N + Xi[2]) * Math.cos(Xi[0]) * Math.sin(Xi[1]);
- Xo[2] = (N * (1.0 - e1sqr) + Xi[2]) * Math.sin(Xi[0]);
- return Xo;
- }
- /**
- * ************************************************************************
- */
- public double[] XYZ2LLA(double[] Xi) {
- double p = Math.sqrt(Xi[0] * Xi[0] + Xi[1] * Xi[1]);
- double T = Math.atan((Xi[2] * a) / (p * b));
- double sT = Math.sin(T);
- double cT = Math.cos(T);
- double[] Xo = new double[3];
- Xo[0] = Math.atan((Xi[2] + e2sqr * b * sT * sT * sT) / (p - e1sqr * a * cT * cT * cT));
- if (Xi[0] == 0.0)
- Xo[1] = pi / 2.0;
- else
- Xo[1] = Math.atan(Xi[1] / Xi[0]);
- double N = a / Math.sqrt(1.0 - e1sqr * Math.sin(Xo[0]) * Math.sin(Xo[0]));
- Xo[2] = p / Math.cos(Xo[0]) - N;
- return Xo;
- }
- /**
- * ************************************************************************
- */
- public double[] satpos_(double[] eph, double Ttr) { //dla pliku input.txt orginalnego
- double Crs = eph[0];
- double dn = eph[1];
- double M0 = eph[2];
- double Cuc = eph[3];
- double ec = eph[4];
- double Cus = eph[5];
- double A = eph[6] * eph[6];
- double Toe = eph[7];
- double Cic = eph[8];
- double W0 = eph[9];
- double Cis = eph[10];
- double i0 = eph[11];
- double Crc = eph[12];
- double w = eph[13];
- double Wdot = eph[14];
- double idot = eph[15];
- //System.out.println("jd"+" "+ Crs+" "+ dn+" "+ M0+" "+ Cuc+" "+ ec+" "+ Cus+" "+ A +" "+ Toe+" "+ Cic+" "+ W0+" "+ Cis+" "+ i0+" "+ Crc+" "+ w+" "+ Wdot+" "+ idot);
- double T = Ttr - Toe;
- if (T > 302400.0) T = T - 604800.0;
- if (T < -302400.0) T = T + 604800.0;
- double n0 = Math.sqrt(mu / (A * A * A));
- double n = n0 + dn;
- double M = M0 + n * T;
- double E = M;
- System.out.println("jd " + " " + M + " " + mu + " " + M0 + " " + T);
- double Eold;
- do {
- Eold = E;
- E = M + ec * Math.sin(E);
- } while (Math.abs(E - Eold) >= 1.0e-8);
- double snu = Math.sqrt(1 - ec * ec) * Math.sin(E) / (1 - ec * Math.cos(E));
- double cnu = (Math.cos(E) - ec) / (1 - ec * Math.cos(E));
- double nu;
- nu = Math.atan2(snu, cnu);
- double phi = nu + w;
- double du = Cuc * Math.cos(2 * phi) + Cus * Math.sin(2 * phi);
- double dr = Crc * Math.cos(2 * phi) + Crs * Math.sin(2 * phi);
- double di = Cic * Math.cos(2 * phi) + Cis * Math.sin(2 * phi);
- double u = phi + du;
- double r = A * (1 - ec * Math.cos(E)) + dr;
- double i = i0 + idot * T + di;
- double Xdash = r * Math.cos(u);
- double Ydash = r * Math.sin(u);
- double Wc = W0 + (Wdot - Wedot) * T - Wedot * Toe;
- double[] X = new double[3];
- X[0] = Xdash * Math.cos(Wc) - Ydash * Math.cos(i) * Math.sin(Wc); //ECEF x
- X[1] = Xdash * Math.sin(Wc) + Ydash * Math.cos(i) * Math.cos(Wc); //ECEF y
- X[2] = Ydash * Math.sin(i); //ECEF z
- double Trel = F * ec * eph[6] * Math.sin(E);
- return new double[]{X[0], X[1], X[2], Trel};
- }
- public double[] satpos(double[] eph, double Ttr) { //dla plikow obs i nav
- //Prawa keplera
- double Crs = eph[0];
- double dn = eph[1];
- double M0 = eph[2];
- double Cuc = eph[3];
- double ec = eph[4];
- double Cus = eph[5];
- double A = eph[6] * eph[6];
- double Toe = eph[7];
- double Cic = eph[8];
- double W0 = eph[9];
- double Cis = eph[10];
- double i0 = eph[11];
- double Crc = eph[12];
- double w = eph[13];
- double Wdot = eph[14];
- double idot = eph[15];
- double T;
- T = Ttr - Toe;
- if (T > 302400.0) T = T - 604800.0; //koniec tygodnia
- if (T < -302400.0) T = T + 604800.0; //poczatek tygodnia
- double n0 = Math.sqrt(mu / (A * A * A)); //ruch sredni
- double n = n0 + dn; //korekta
- double M = M0 + n * T; //srednia anomalia
- double E = M; //E
- double Eold;
- do {
- Eold = E;
- E = M + ec * Math.sin(E); //
- } while (Math.abs(E - Eold) >= 1.0e-8);
- double snu = Math.sqrt(1 - ec * ec) * Math.sin(E) / (1 - ec * Math.cos(E)); //
- double cnu = (Math.cos(E) - ec) / (1 - ec * Math.cos(E)); //
- double nu; //
- nu = Math.atan2(snu, cnu); //
- double phi = nu + w; //
- double du = Cuc * Math.cos(2 * phi) + Cus * Math.sin(2 * phi); //
- double dr = Crc * Math.cos(2 * phi) + Crs * Math.sin(2 * phi); //
- double di = Cic * Math.cos(2 * phi) + Cis * Math.sin(2 * phi); //
- double u = phi + du; //
- double r = A * (1 - ec * Math.cos(E)) + dr; //
- double i = i0 + idot * T + di; //inklinacja
- double Xdash = r * Math.cos(u); //
- double Ydash = r * Math.sin(u); //
- double Wc = W0 + (Wdot - Wedot) * T - Wedot * Toe; //wezel wspeptujacy
- double[] X = new double[3];
- X[0] = Xdash * Math.cos(Wc) - Ydash * Math.cos(i) * Math.sin(Wc); //ECEF x
- X[1] = Xdash * Math.sin(Wc) + Ydash * Math.cos(i) * Math.cos(Wc); //ECEF y
- X[2] = Ydash * Math.sin(i); //ECEF z
- double Trel = F * ec * eph[6] * Math.sin(E); //korekta relatiwystyczna
- return new double[]{X[0], X[1], X[2], Trel};
- }
- /**
- * ************************************************************************
- */
- public double[] calcAzEl(double[] Xs, double[] Xu) {
- double x = Xu[0];
- double y = Xu[1];
- double z = Xu[2];
- double p = Math.sqrt(x * x + y * y);
- if (p == 0.0)
- return null;
- double R = Math.sqrt(x * x + y * y + z * z);
- double[][] e = new double[3][3];
- e[0][0] = -y / p;
- e[0][1] = x / p;
- e[0][2] = 0.0;
- e[1][0] = -x * z / (p * R);
- e[1][1] = -y * z / (p * R);
- e[1][2] = p / R;
- e[2][0] = x / R;
- e[2][1] = y / R;
- e[2][2] = z / R;
- double[] d = new double[3];
- for (int k = 0; k < 3; k++) {
- d[k] = 0.0;
- for (int i = 0; i < 3; i++)
- d[k] += (Xs[i] - Xu[i]) * e[k][i];
- }
- double s = d[2] / Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
- double El;
- if (s == 1.0)
- El = 0.5 * pi;
- else
- El = Math.atan(s / Math.sqrt(1.0 - s * s));
- double Az;
- if ((d[1] == 0.0) && (d[0] > 0.0))
- Az = 0.5 * pi;
- else if ((d[1] == 0.0) && (d[0] < 0.0))
- Az = 1.5 * pi;
- else {
- Az = Math.atan(d[0] / d[1]);
- if (d[1] < 0.0)
- Az += pi;
- else if ((d[1] > 0.0) && (d[0] < 0.0))
- Az += 2.0 * pi;
- }
- return new double[]{Az, El};
- }
- /**
- * ************************************************************************
- * korekty jonosferyczne *
- */
- public double ionocorr(double[] ion, double Latu, double Lonu, double Az, double El, double Ttr) {
- double a0 = ion[0];
- double a1 = ion[1];
- double a2 = ion[2];
- double a3 = ion[3];
- double b0 = ion[4];
- double b1 = ion[5];
- double b2 = ion[6];
- double b3 = ion[7];
- Latu = Latu / pi;
- Lonu = Lonu / pi;
- El = El / pi;
- double phi = 0.0137 / (El + 0.11) - 0.022;
- double Lati = Latu + phi * Math.cos(Az);
- if (Lati > 0.416)
- Lati = 0.416;
- else if (Lati < -0.416)
- Lati = -0.416;
- double Loni = Lonu + phi * Math.sin(Az) / Math.cos(Lati * pi);
- double Latm = Lati + 0.064 * Math.cos((Loni - 1.617) * pi);
- double T = 4.32E+4 * Loni + Ttr;
- if (T >= 86400.0)
- T -= 86400.0;
- else if (T < 0)
- T += 86400.0;
- double F = 1.0 + 16.0 * (0.53 - El) * (0.53 - El) * (0.53 - El);
- double per = b0 + b1 * Latm + b2 * Latm * Latm + b3 * Latm * Latm * Latm;
- if (per < 72000.0)
- per = 72000.0;
- double x = 2 * pi * (T - 50400.0) / per;
- double amp = a0 + a1 * Latm + a2 * Latm * Latm + a3 * Latm * Latm * Latm;
- if (amp < 0.0)
- amp = 0.0;
- double dTiono;
- if (Math.abs(x) >= 1.57)
- dTiono = F * 5.0E-9;
- else
- dTiono = F * (5.0E-9 + amp * (1.0 - x * x / 2.0 + x * x * x * x / 24.0));
- return dTiono;
- }
- /**
- * ************************************************************************
- * wyznacznik macierzy
- */
- public double sub(double[][] A, int r, int c) {
- double[][] B = new double[3][3];
- int i1, j1;
- for (int i = 0; i < 3; i++) {
- i1 = i;
- if (i >= r)
- i1++;
- for (int j = 0; j < 3; j++) {
- j1 = j;
- if (j >= c)
- j1++;
- B[i][j] = A[i1][j1];
- }
- }
- double subdet = B[0][0] * (B[1][1] * B[2][2] - B[1][2] * B[2][1])
- - B[1][0] * (B[0][1] * B[2][2] - B[2][1] * B[0][2])
- + B[2][0] * (B[0][1] * B[1][2] - B[0][2] * B[1][1]);
- return subdet;
- }
- /**
- * ************************************************************************
- * szukaj rozwiazania iteracyjnie
- */
- public double[] solve(double[][] Xs, boolean[] SV, double[] P, double[] Xr) {
- double[] R = new double[33];
- double[] L = new double[33];
- double[][] A = new double[33][4];
- double[] AL = new double[4];
- double[][] AA = new double[4][4];
- double[][] AAi = new double[4][4];
- double det;
- double[] D = new double[5];
- int it = 0; //
- do {
- it++;
- for (int prn = 1; prn <= 32; prn++)
- if (SV[prn]) {
- //odleglosc odbiornika i satelity
- R[prn] = Math.sqrt((Xr[0] - Xs[prn][0]) * (Xr[0] - Xs[prn][0])
- + (Xr[1] - Xs[prn][1]) * (Xr[1] - Xs[prn][1])
- + (Xr[2] - Xs[prn][2]) * (Xr[2] - Xs[prn][2]));
- //residuum
- L[prn] = P[prn] - R[prn];
- //
- for (int k = 0; k < 3; k++)
- A[prn][k] = (Xr[k] - Xs[prn][k]) / R[prn];
- A[prn][3] = -1.0;
- }
- //praca na macierzach
- for (int k = 0; k <= 3; k++) {
- AL[k] = 0.0;
- for (int prn = 1; prn <= 32; prn++)
- if (SV[prn])
- AL[k] += A[prn][k] * L[prn];
- }
- //
- for (int k = 0; k <= 3; k++)
- for (int i = 0; i <= 3; i++) {
- AA[k][i] = 0.0;
- for (int prn = 1; prn <= 32; prn++)
- if (SV[prn])
- AA[k][i] += A[prn][k] * A[prn][i];
- }
- //dowrotnosc macierzy
- //
- det = AA[0][0] * sub(AA, 0, 0) - AA[1][0] * sub(AA, 1, 0)
- + AA[2][0] * sub(AA, 2, 0) - AA[3][0] * sub(AA, 3, 0);
- if (det == 0.0)
- return null;
- int j;
- int n;
- for (int k = 0; k <= 3; k++)
- for (int i = 0; i <= 3; i++) {
- n = k + i;
- if (n % 2 != 0) //
- j = -1;
- else
- j = 1;
- AAi[k][i] = j * sub(AA, i, k) / det;
- }
- //mnozenie z odwrtonoscia macierzy
- for (int k = 0; k <= 3; k++) {
- D[k] = 0.0;
- for (int i = 0; i <= 3; i++)
- D[k] += AAi[k][i] * AL[i];
- }
- //uaktualnij pozycje
- for (int k = 0; k < 3; k++)
- Xr[k] += D[k];
- } while ((it < 9) //maksimu 6 iteracji w innym wypadku jest cos nie tak
- && ((Math.abs(D[0]) + Math.abs(D[1]) + Math.abs(D[2])) >= 1.0E-2)); //kryterium
- double Cr = D[3]; //blad zegara
- if (it >= 9) {
- System.out.println("rozwiazanie, przekroczony limit. it = " + it);
- return null;
- }
- return new double[]{Xr[0], Xr[1], Xr[2], Cr};
- }
- /**
- * ************************************************************************
- */
- public void main() {
- double Trc = 0; //GPS czas odbioru
- double Cr; //korekta zegara
- double[] Xlla = new double[3]; //[rad,rad,m]
- double[] Xr = new double[3]; //pozycja odbiornika, ECEF
- boolean[] SV = new boolean[33]; //ktore satelity sa wykorzystywane
- double[][] Xs = new double[33][3]; //pozycja satelitow
- double[][] eph = new double[33][16]; //efemerydy
- double[][] clk = new double[33][5]; //dane dot. zegara
- double[] ion = new double[8]; //poprawiki jonosferyczne
- double[] Praw = new double[33]; //pseudoodleglosci
- double[] Pcor = new double[33]; //skorygowane pseudoodleglosci
- FileDialog d = new FileDialog(new Frame(), "Wybierz plik N", FileDialog.LOAD);
- d.setFile("*");
- d.show();
- String file1 = d.getFile();
- if (file1 != null)
- file1 = d.getDirectory() + d.getFile();
- else return;
- BufferedReader br = null;
- try {
- br = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
- } catch (IOException e) {
- System.out.println("IOException = " + e);
- return;
- } catch (Throwable e) {
- System.err.println(e);
- return;
- }
- try {
- String line;
- for (int i = 0; i < 3; i++) {
- if ((line = br.readLine()) != null) ;
- }
- //iono
- if ((line = br.readLine()) != null) {
- for (int i = 0; i < 4; i++) {
- ion[i] = Double.parseDouble(line.substring(2 + (i * 12), 2 + ((i + 1) * 12)));
- }
- }
- if ((line = br.readLine()) != null) {
- for (int i = 0; i < 4; i++) {
- ion[i + 4] = Double.parseDouble(line.substring(2 + (i * 12), 2 + ((i + 1) * 12)));
- }
- }
- do {
- if ((line = br.readLine()) != null) ;
- } while (line != null && !line.contains("END OF HEADER"));
- //efemerydy
- StringTokenizer st;
- for (int prn = 1; prn < 32; prn++)
- SV[prn] = false;
- int prn1 = 0;
- do {
- if ((line = br.readLine()) != null) {
- st = new StringTokenizer(line);
- prn1 = Integer.parseInt(st.nextToken());
- for (int i = 0; i < 6; i++)
- st.nextToken();
- clk[prn1][0] = 4.65661287307739E-0010;
- clk[prn1][2] = Double.parseDouble(st.nextToken());
- clk[prn1][3] = Double.parseDouble(st.nextToken());
- clk[prn1][4] = Double.parseDouble(st.nextToken());
- //Praw[prn1] = Double.valueOf(st.nextToken()).doubleValue();
- SV[prn1] = true;
- int el = 0;
- for (int i = 0; i < 7; i++) {
- if ((line = br.readLine()) != null) {
- st = new StringTokenizer(line);
- if (i == 0) {
- st.nextToken();
- for (int j = 0; j < 3; j++) {
- eph[prn1][el] = Double.parseDouble(st.nextToken());
- el++;
- }
- } else if (i == 4) {
- eph[prn1][el] = Double.parseDouble(st.nextToken());
- } else if (i < 4) {
- for (int j = 0; j < 4; j++) {
- eph[prn1][el] = Double.parseDouble(st.nextToken());
- if (el == 7)
- clk[prn1][1] = eph[prn1][el];
- el++;
- }
- }
- }
- }
- }
- } while (line != null); //
- br.close();
- d = new FileDialog(new Frame(), "Wybierz plik O", FileDialog.LOAD);
- d.setFile("*");
- d.show();
- String file2 = d.getFile();
- if (file2 != null)
- file2 = d.getDirectory() + d.getFile();
- else return;
- try {
- br = new BufferedReader(new InputStreamReader(new FileInputStream(file2)));
- } catch (IOException e) {
- System.out.println("IOException = " + e);
- return;
- }
- StringBuilder lineSearch = new StringBuilder();
- int num = 0;
- int used = 0;
- for (boolean flag : SV) {
- if (flag) {
- lineSearch.append(Integer.toString(num)).append("G");
- used++;
- }
- num++;
- }
- lineSearch.setLength(lineSearch.length() - 1);
- lineSearch.append("R");
- do {
- if ((line = br.readLine()) != null) ;
- } while (line != null && !line.contains(lineSearch.toString()));
- st = new StringTokenizer(line);
- StringBuilder sDate = new StringBuilder(Integer.toString(2000 + Integer.parseInt(st.nextToken())));
- sDate.insert(0, Integer.toString(Integer.parseInt(st.nextToken())) + "/");
- sDate.insert(0, Integer.toString(Integer.parseInt(st.nextToken())) + "/");
- SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
- Date date = format.parse(sDate.toString());
- Calendar c = Calendar.getInstance();
- c.setTime(date);
- int weekDay = c.get(Calendar.DAY_OF_WEEK);
- weekDay -= 1;
- Trc = (((weekDay * 24) + Integer.parseInt(st.nextToken())) * 3600) + (Integer.parseInt(st.nextToken()) * 60) + (int) Double.parseDouble(st.nextToken());
- String[] s = line.split(" +");
- s = s[8].split("G");
- int found = Integer.parseInt(s[0]);
- prn1 = 0;
- for (boolean flag : SV) {
- if (flag) {
- if ((line = br.readLine()) != null) ;
- st = new StringTokenizer(line);
- Praw[prn1] = Float.parseFloat(st.nextToken());
- if ((line = br.readLine()) != null) ;
- }
- prn1++;
- }
- System.out.println(Double.toString(Trc));
- for (Double i : ion) {
- System.out.println(Double.toString(i));
- }
- int i = 0;
- for (boolean flag : SV) {
- if (flag)
- System.out.println(Integer.toString(i) + " " + Double.toString(Praw[i]));
- i++;
- }
- i = 0;
- for (boolean flag : SV) {
- if (flag) {
- System.out.println(Integer.toString(i));
- for (Double db : eph[i]) {
- System.out.println(Double.toString(db));
- }
- for (Double db : clk[i]) {
- System.out.println(Double.toString(db));
- }
- }
- i++;
- }
- //
- } catch (IOException | ParseException e) {
- System.out.println("IOException = " + e);
- }
- System.out.println("SPozycja poczatkowa Lat [deg.dec] + Lon [deg.dec] + Alt [m] : ");
- System.out.println(" 52 5 0");
- Xlla[0] = 54.373810539 * pi / 180.0;
- Xlla[1] = 18.614489984 * pi / 180.0;
- Xlla[2] = 0;
- Xr = LLA2XYZ(Xlla);
- Cr = 0;
- for (int prn = 1; prn <= 32; prn++)
- Pcor[prn] = 0.075 * c; //
- for (int pass = 1; pass <= 2; pass++) {
- System.out.println();
- System.out.println("-------------------------- Iteracja " + pass + " -------------------------");
- for (int prn = 1; prn <= 32; prn++) //
- if (SV[prn]) {
- //wylicz czas
- double tau = (Pcor[prn] + Cr) / c;
- double Ttr = Trc - tau;
- //
- double[] tmp4 = satpos(eph[prn], Ttr);
- //
- double alpha = tau * We;
- Xs[prn][0] = tmp4[0] * Math.cos(alpha) + tmp4[1] * Math.sin(alpha);
- Xs[prn][1] = -tmp4[0] * Math.sin(alpha) + tmp4[1] * Math.cos(alpha);
- Xs[prn][2] = tmp4[2];
- double Trel = tmp4[3];
- System.out.println("SV : " + prn + " " + Xs[prn][0] + " " + Xs[prn][1] + " " + Xs[prn][2]);
- //
- //wylicza azymut i elewacje
- double[] tmp3 = new double[3];
- for (int i = 0; i < 3; i++)
- tmp3[i] = Xs[prn][i];
- double[] tmp2 = calcAzEl(tmp3, Xr);
- double Az, El;
- if (tmp2 == null) {
- System.out.println("Blad - sprawdz dane wejsciowe");
- return;
- } else {
- Az = tmp2[0];
- El = tmp2[1];
- }
- System.out.println("Az, El : " + prn + " " + (Az * 180.0 / pi) + " " + (El * 180.0 / pi));
- //oblicz pseudoodleglosci
- //poprawki zegara
- double dTclck = -clk[prn][0] + clk[prn][2] + clk[prn][3] * (Ttr - clk[prn][1])
- + clk[prn][4] * (Ttr - clk[prn][1]) * (Ttr - clk[prn][1])
- + Trel;
- //poprawki iono
- double dTiono = ionocorr(ion, Xlla[0], Xlla[1], Az, El, Ttr);
- //poprawki tropo
- double dRtrop = 2.312 / Math.sin(Math.sqrt(El * El + 1.904E-3))
- + 0.084 / Math.sin(Math.sqrt(El * El + 0.6854E-3));
- System.out.println("Corr : " + prn + " " + (dTclck * c) + " " + (dTiono * c) + " " + dRtrop);
- //pseudoodleglosci poprawione
- Pcor[prn] = Praw[prn] + dTclck * c - dTiono * c - dRtrop + Cr;
- } //for
- //oblicz pozycje odbiornika
- double[] tmp4 = solve(Xs, SV, Pcor, Xr);
- if (tmp4 == null) {
- System.out.println("Blad - sprawdz dane wejsciowe");
- return;
- } else {
- Xr[0] = tmp4[0];
- Xr[1] = tmp4[1];
- Xr[2] = tmp4[2];
- Cr = tmp4[3];
- }
- System.out.println();
- System.out.println("Pos XYZ: " + Xr[0] + " " + Xr[1] + " " + Xr[2] + " " + Cr);
- Xlla = XYZ2LLA(Xr);
- System.out.println("Pos LLA: " + (Xlla[0] * 180.0 / pi) + " " + (Xlla[1] * 180.0 / pi) + " " + Xlla[2]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement