/// <summary>
        /// returns the angle in desired mode between 0 and 180
        /// </summary>
        /// <param name="firstPoint"></param>
        /// <param name="middlePoint"></param>
        /// <param name="lastPoint"></param>
        /// <returns></returns>
        public static double GetAngle(IPoint firstPoint, IPoint middlePoint, IPoint lastPoint, AngleMode mode = AngleMode.Radian)
        {
            var radianAngle = Math.Acos(GetCosineOfAngle(firstPoint, middlePoint, lastPoint));

            if (mode == AngleMode.Radian)
            {
                return(radianAngle);
            }
            else if (mode == AngleMode.Degree)
            {
                return(UnitConversion.RadianToDegree(radianAngle));
            }
            else if (mode == AngleMode.Grade)
            {
                return(UnitConversion.RadianToGrade(radianAngle));
            }

            throw new NotImplementedException("SpatialUtility > GetAngle");
        }