Esempio n. 1
0
 internal GeodesicLineExact(GeodesicExact g,
                            double lat1, double lon1,
                            double azi1, double salp1, double calp1,
                            GeodesicFlags caps, bool arcmode, double s13_a13)
 {
     LineInit(g, lat1, lon1, azi1, salp1, calp1, caps, ref _lat1, ref _lon1, ref _azi1, ref _salp1, ref _calp1,
              ref _a, ref _f, ref _b, ref _c2, ref _f1, ref _e2, ref _caps, ref _dn1, ref _salp0, ref _calp0, ref _ssig1, ref _csig1,
              ref _somg1, ref _comg1, ref _cchi1, ref _k2, ref _E0, ref _E1, ref _stau1, ref _ctau1, ref _D0, ref _D1, ref _H0, ref _H1,
              ref _A4, ref _B41, ref _s13, ref _a13);
     SetDistance(arcmode, s13_a13);
 }
Esempio n. 2
0
 /// <summary>
 /// Constructor for a exact geodesic line staring at latitude <i>lat1</i>, longitude <i>lon1</i>,
 /// and azimuth <i>azi1</i> (all in degrees).
 /// </summary>
 /// <param name="g">
 /// A <see cref="GeodesicExact"/> object used to compute the necessary information about the <see cref="GeodesicLineExact"/>.
 /// </param>
 /// <param name="lat1">latitude of point 1 (degrees).</param>
 /// <param name="lon1">longitude of point 1 (degrees).</param>
 /// <param name="azi1">azimuth at point 1 (degrees).</param>
 /// <param name="caps">bitor'ed combination of <see cref="GeodesicFlags"/> values specifying the capabilities
 /// the <see cref="GeodesicLineExact"/> object should possess, i.e., which quantities can be returned in calls to
 /// <see cref="GeodesicLineBase.Position(double, out double, out double, out double, out double, out double, out double, out double)"/>.</param>
 /// <remarks>
 /// <i>lat1</i> should be in the range [−90°, 90°].
 /// <para>
 /// The <see cref="GeodesicFlags"/> values possible for <i>caps</i> are
 /// <list type="bullet">
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.Latitude"/> for the latitude <i>lat2</i>; this is added automatically;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.Longitude"/> for the latitude <i>lon2</i>;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.Azimuth"/> for the latitude <i>azi2</i>;this is added automatically;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.Distance"/> for the distance <i>s12</i>;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.ReducedLength"/> for the reduced length <i>m12</i>;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.GeodesicScale"/> for the geodesic scales <i>M12</i> and <i>M21</i>;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.Area"/> for the area <i>S12</i>;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.DistanceIn"/>
 /// permits the length of the geodesic to be given in terms of <i>s12</i>;
 /// without this capability the length can only be specified in terms of arc length;</item>
 /// <item><i>caps</i> |= <see cref="GeodesicFlags.All"/> for all of the above.</item>
 /// </list>
 /// The default value of <i>caps</i> is <see cref="GeodesicFlags.All"/>.
 /// </para>
 /// <para>
 /// If the point is at a pole, the azimuth is defined by keeping lon1 fixed,
 /// writing <i>lat1</i> = ±(90° − ε), and taking the limit ε → 0+.
 /// </para>
 /// </remarks>
 public GeodesicLineExact(GeodesicExact g,
                          double lat1, double lon1, double azi1,
                          GeodesicFlags caps)
 {
     azi1 = AngNormalize(azi1);
     // Guard against underflow in salp0.  Also -0 is converted to +0.
     SinCosd(AngRound(azi1), out var salp1, out var calp1);
     LineInit(g, lat1, lon1, azi1, salp1, calp1, caps, ref _lat1, ref _lon1, ref _azi1, ref _salp1, ref _calp1,
              ref _a, ref _f, ref _b, ref _c2, ref _f1, ref _e2, ref _caps, ref _dn1, ref _salp0, ref _calp0, ref _ssig1, ref _csig1,
              ref _somg1, ref _comg1, ref _cchi1, ref _k2, ref _E0, ref _E1, ref _stau1, ref _ctau1, ref _D0, ref _D1, ref _H0, ref _H1,
              ref _A4, ref _B41, ref _s13, ref _a13);
 }