public static double GetTurnAmount(this IntPoint currentPoint, IntPoint prevPoint, IntPoint nextPoint)
        {
            if (prevPoint != currentPoint &&
                currentPoint != nextPoint &&
                nextPoint != prevPoint)
            {
                prevPoint  = currentPoint - prevPoint;
                nextPoint -= currentPoint;

                double prevAngle = Math.Atan2(prevPoint.Y, prevPoint.X);

                // undo the rotation
                nextPoint = nextPoint.GetRotated(-prevAngle);
                double angle = Math.Atan2(nextPoint.Y, nextPoint.X);

                return(angle);
            }

            return(0);
        }
        public static double GetTurnAmount(IntPoint prevPoint, IntPoint currentPoint, IntPoint nextPoint)
        {
            if (prevPoint != currentPoint
                && currentPoint != nextPoint
                && nextPoint != prevPoint)
            {
                prevPoint = currentPoint - prevPoint;
                nextPoint -= currentPoint;

                double prevAngle = Math.Atan2(prevPoint.Y, prevPoint.X);
                IntPoint rotatedPrev = prevPoint.GetRotated(-prevAngle);

                // undo the rotation
                nextPoint = nextPoint.GetRotated(-prevAngle);
                double angle = Math.Atan2(nextPoint.Y, nextPoint.X); ;

                return angle;
            }

            return 0;
        }