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; }