OSDN Git Service

Enu座標を追加
[yubeshi/yubeshi.git] / YubeshiTest / EnuCoordinateTest.cs
1 /*\r
2  *      Yubeshi GPS Parser\r
3  *\r
4  *      This software is distributed under a zlib-style license.\r
5  *      See license.txt for more information.\r
6  */\r
7 \r
8 using System;\r
9 using System.Collections.Generic;\r
10 using System.Text;\r
11 using NUnit.Framework;\r
12 using Yubeshi;\r
13 \r
14 namespace YubeshiTest\r
15 {\r
16     class EnuCoordinateTest\r
17     {\r
18 \r
19         [Test]\r
20         public void ZeroDistance()\r
21         {\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
28         }\r
29 \r
30         [Test]\r
31         public void UpOnly()\r
32         {\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
38 \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
42         }\r
43 \r
44         [Test]\r
45         public void TwoPoints()\r
46         {\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
54                                         0.0);\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
60 \r
61             // approximation\r
62             double distance = Math.Sqrt(de * de + dn * dn);\r
63             double direction = Math.Atan2(de, dn) * 180.0 / Math.PI;\r
64             \r
65             Assert.AreEqual(8222.097, distance, 15.0);\r
66 \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
72         }\r
73     }\r
74 }\r