public static PointPolar PtdDecartToPolar(PointD decartPointD, PointD center, PointD zeroAnglePoint)
        {
            double diffX           = zeroAnglePoint.X - center.X;
            double diffY           = zeroAnglePoint.Y - center.Y;
            double zeroAnglePointR = Math.Sqrt(diffX * diffX + diffY * diffY);
            double zeroAngle       = 0.0d;

            if (zeroAnglePointR != 0.0d)
            {
                zeroAngle = Math.Acos(diffX / zeroAnglePointR);
                if (diffY >= 0)
                {
                    zeroAngle = 2.0d * Math.PI - zeroAngle;
                }
            }

            PointPolar polarPointD = new PointPolar();

            diffX           = decartPointD.X - center.X;
            diffY           = decartPointD.Y - center.Y;
            polarPointD.R   = Math.Sqrt(diffX * diffX + diffY * diffY);
            polarPointD.Phi = Math.Acos(diffX / polarPointD.R);
            if (diffY >= 0)
            {
                polarPointD.Phi = 2.0d * Math.PI - polarPointD.Phi;
            }

            polarPointD.Phi -= zeroAngle;
            polarPointD.CropAngle(true);

            return(polarPointD);
        }
        public static List <PointPolar> ListDecartToPolar(List <PointD> decartPointdList, PointD center, PointD zeroAnglePoint, out double zeroAngleValue)
        {
            double diffX           = zeroAnglePoint.X - center.X;
            double diffY           = zeroAnglePoint.Y - center.Y;
            double zeroAnglePointR = Math.Sqrt(diffX * diffX + diffY * diffY);
            double zeroAngle       = 0.0d;

            if (zeroAnglePointR != 0.0d)
            {
                zeroAngle = Math.Acos(diffX / zeroAnglePointR);
                if (diffY >= 0)
                {
                    zeroAngle = 2.0d * Math.PI - zeroAngle;
                }
            }

            zeroAngleValue = zeroAngle;

            List <PointPolar> retList = new List <PointPolar>();

            foreach (PointD curPointDecart in decartPointdList)
            {
                PointPolar polarPointD = new PointPolar();
                diffX           = curPointDecart.X - center.X;
                diffY           = curPointDecart.Y - center.Y;
                polarPointD.R   = Math.Sqrt(diffX * diffX + diffY * diffY);
                polarPointD.Phi = Math.Acos(diffX / polarPointD.R);
                if (diffY >= 0)
                {
                    polarPointD.Phi = 2.0d * Math.PI - polarPointD.Phi;
                }

                polarPointD.Phi -= zeroAngle;
                polarPointD.CropAngle(true);

                retList.Add(polarPointD);
            }
            return(retList);
        }