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
14 public class EnuCoordinate
\r
20 #region constructors
\r
22 public EnuCoordinate(double e, double n, double u)
\r
23 : this(e, n, u, null)
\r
27 public EnuCoordinate(double e, double n, double u,
\r
28 EcefCoordinate origin)
\r
36 public EnuCoordinate(EcefCoordinate target, EcefCoordinate origin)
\r
37 : this(target, origin, origin.ToGeodeticCoordinate())
\r
41 public EnuCoordinate(GeodeticCoordinate target,
\r
42 GeodeticCoordinate origin)
\r
43 : this(target.ToEcefCoordinate(),
\r
44 origin.ToEcefCoordinate(), origin)
\r
48 private EnuCoordinate(EcefCoordinate target,
\r
49 EcefCoordinate origin, GeodeticCoordinate llhOrigin)
\r
52 double dx = target.X - origin.X;
\r
53 double dy = target.Y - origin.Y;
\r
54 double dz = target.Z - origin.Z;
\r
55 double longitude = llhOrigin.Longitude.Radian;
\r
56 double latitude = llhOrigin.Latitude.Radian;
\r
57 double sinLongitude = Math.Sin(longitude);
\r
58 double cosLongitude = Math.Cos(longitude);
\r
59 double sinLatitude = Math.Sin(latitude);
\r
60 double cosLatitude = Math.Cos(latitude);
\r
62 E = -sinLongitude * dx +
\r
64 N = -sinLatitude * cosLongitude * dx -
\r
65 sinLatitude * sinLongitude * dy +
\r
67 U = cosLatitude * cosLongitude * dx +
\r
68 cosLatitude * sinLongitude * dy +
\r
94 public EcefCoordinate Origin
\r
102 #region public methods
\r
103 public EcefCoordinate ToEcefCoordinate()
\r
105 GeodeticCoordinate llhOrigin = Origin.ToGeodeticCoordinate();
\r
107 double longitude = llhOrigin.Longitude.Radian;
\r
108 double latitude = llhOrigin.Latitude.Radian;
\r
109 double sinLongitude = Math.Sin(longitude);
\r
110 double cosLongitude = Math.Cos(longitude);
\r
111 double sinLatitude = Math.Sin(latitude);
\r
112 double cosLatitude = Math.Cos(latitude);
\r
114 double dx = -sinLongitude * E -
\r
115 sinLatitude*cosLongitude * N +
\r
116 cosLatitude*cosLongitude * U;
\r
117 double dy = cosLongitude * E -
\r
118 sinLatitude*sinLongitude * N +
\r
119 cosLatitude*sinLongitude * U;
\r
120 double dz = cosLatitude * N + sinLatitude * U;
\r
122 return new EcefCoordinate(
\r
123 dx + Origin.X, dy + Origin.Y, + dz + Origin.Z);
\r