4 * This software is distributed under a zlib-style license.
\r
5 * See license.txt for more information.
\r
9 using System.Collections.Generic;
\r
11 using NUnit.Framework;
\r
13 using C = YubeshiTest.SampleCoordinates;
\r
15 namespace YubeshiTest
\r
17 class EnuCoordinateTest
\r
19 private static double metreError = 1e-9; // 1nm
\r
21 public void ZeroDistance()
\r
23 EnuCoordinate enu = new EnuCoordinate(C.SkytreeTop, C.SkytreeTop);
\r
24 Assert.AreEqual(0.0, enu.E);
\r
25 Assert.AreEqual(0.0, enu.N);
\r
26 Assert.AreEqual(0.0, enu.U);
\r
30 public void UpOnly()
\r
32 EnuCoordinate enu = new EnuCoordinate(
\r
33 C.SkytreeTop, C.SkytreeBottom);
\r
35 Assert.AreEqual(0.0, enu.E, metreError);
\r
36 Assert.AreEqual(0.0, enu.N, metreError);
\r
37 Assert.AreEqual(634.0, enu.U, metreError);
\r
41 public void TwoPoints()
\r
43 GeodeticCoordinate c1 = C.SkytreeTop;
\r
44 GeodeticCoordinate c2 = C.TokyoTowerTop;
\r
45 GeodeticCoordinate c0 = new GeodeticCoordinate(
\r
46 0.5 * (c1.Latitude + c2.Latitude),
\r
47 0.5 * (c1.Longitude + c2.Longitude),
\r
49 EnuCoordinate enu1 = new EnuCoordinate(c1, c0);
\r
50 EnuCoordinate enu2 = new EnuCoordinate(c2, c0);
\r
51 double de = enu1.E - enu2.E;
\r
52 double dn = enu1.N - enu2.N;
\r
53 double du = enu1.U - enu2.U;
\r
56 double distance = Math.Sqrt(de * de + dn * dn);
\r
57 double direction = Math.Atan2(de, dn) * 180.0 / Math.PI;
\r
59 Assert.AreEqual(8222.097, distance, 15.0);
\r
61 // c1->c2 45.926 deg
\r
62 // c2->c1 45.965 + 180 deg
\r
63 // 45.9455 = 0.5 * (45.926 + 45.965)
\r
64 Assert.AreEqual(45.946, direction, 1.0 / 60.0);
\r
65 Assert.AreEqual(289.0, du, 1e-3);
\r
69 public void ToEcefCoordinate()
\r
71 EnuCoordinate enu = new EnuCoordinate(
\r
72 C.SkytreeTop, C.TokyoTowerTop);
\r
73 EcefCoordinate ecef1 = enu.ToEcefCoordinate();
\r
74 EcefCoordinate ecef2 = C.SkytreeTop.ToEcefCoordinate();
\r
76 Assert.AreEqual(ecef2.X, ecef1.X, metreError);
\r
77 Assert.AreEqual(ecef2.Y, ecef1.Y, metreError);
\r
78 Assert.AreEqual(ecef2.Z, ecef1.Z, metreError);
\r