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
14 namespace YubeshiTest
\r
16 class EnuCoordinateTest
\r
20 public void ZeroDistance()
\r
22 GeodeticCoordinate c =
\r
23 new GeodeticCoordinate(35.710058, 139.810719, 634.0);
\r
24 EnuCoordinate enu = new EnuCoordinate(c, c);
\r
25 Assert.AreEqual(0.0, enu.E);
\r
26 Assert.AreEqual(0.0, enu.N);
\r
27 Assert.AreEqual(0.0, enu.U);
\r
31 public void UpOnly()
\r
33 GeodeticCoordinate c1 =
\r
34 new GeodeticCoordinate(35.710058, 139.810719, 634.0);
\r
35 GeodeticCoordinate c2 =
\r
36 new GeodeticCoordinate(35.710058, 139.810719, 0.0);
\r
37 EnuCoordinate enu = new EnuCoordinate(c1, c2);
\r
39 Assert.AreEqual(0.0, enu.E, 1e-9);
\r
40 Assert.AreEqual(0.0, enu.N, 1e-9);
\r
41 Assert.AreEqual(634.0, enu.U, 1e-9);
\r
45 public void TwoPoints()
\r
47 GeodeticCoordinate c1 =
\r
48 new GeodeticCoordinate(35.710058, 139.810719, 634.0);
\r
49 GeodeticCoordinate c2 =
\r
50 new GeodeticCoordinate(35.658611, 139.745556, 351.0);
\r
51 GeodeticCoordinate c0 = new GeodeticCoordinate(
\r
52 0.5 * (c1.Latitude + c2.Latitude),
\r
53 0.5 * (c1.Longitude + c2.Longitude),
\r
55 EnuCoordinate enu1 = new EnuCoordinate(c1, c0);
\r
56 EnuCoordinate enu2 = new EnuCoordinate(c2, c0);
\r
57 double de = enu1.E - enu2.E;
\r
58 double dn = enu1.N - enu2.N;
\r
59 double du = enu1.U - enu2.U;
\r
62 double distance = Math.Sqrt(de * de + dn * dn);
\r
63 double direction = Math.Atan2(de, dn) * 180.0 / Math.PI;
\r
65 Assert.AreEqual(8222.097, distance, 15.0);
\r
67 // c1->c2 45.926 deg
\r
68 // c2->c1 45.965 + 180 deg
\r
69 // 45.9455 = 0.5 * (45.926 + 45.965)
\r
70 Assert.AreEqual(45.946, direction, 1.0 / 60.0);
\r
71 Assert.AreEqual(283.0, du, 1e-3);
\r