Пример #1
0
        /// <summary>
        /// Is loop clockwise normalized?
        /// </summary>
        /// <param name="loop"></param>
        /// <param name="isTransmeridian"></param>
        /// <returns></returns>
        private static bool IsClockwiseNormalized(this LinkedGeoLoop loop, bool isTransmeridian)
        {
            var sum = 0m;

            var nodes = loop.Nodes;

            for (var idx = 0; idx < nodes.Count; idx++)
            {
                var a = nodes[idx];
                var b = nodes[(idx + 1) % nodes.Count];

                // If we identify a transmeridian arc (> 180 degrees longitude),
                // start over with the transmeridian flag set
                if (!isTransmeridian && Math.Abs(a.Longitude - b.Longitude) > Constants.H3.M_PI)
                {
                    return(loop.IsClockwiseNormalized(true));
                }
                sum += (b.Longitude.NormalizeLongitude(isTransmeridian) -
                        a.Longitude.NormalizeLongitude(isTransmeridian)) *
                       (b.Latitude + a.Latitude);
            }

            return(sum > 0);
        }
Пример #2
0
 /// <summary>
 /// Is loop clockwise?
 /// </summary>
 /// <param name="loop"></param>
 /// <returns></returns>
 public static bool IsClockwise(this LinkedGeoLoop loop)
 {
     return(loop.IsClockwiseNormalized(false));
 }