public List <GeoCoordinate> GenerateCoordinates()
        {
            List <GeoCoordinate> ret = new List <GeoCoordinate>()
            {
                HomeCoordinate
            };

            double radius     = MetricCircumFerence / (2 * Math.PI);
            double interval   = 360.0 / NumberOfCoordinates;
            double startAngle = interval / 2;

            double        centerAdditionalMetricLatitude  = radius * Math.Sin(Common.DegreeToRadian(CircleDirection));
            double        centerAdditionalMetricLongitude = radius * Math.Cos(Common.DegreeToRadian(CircleDirection));
            GeoCoordinate circleCenter = GeoCoordinate.AddMetricDistance(HomeCoordinate, centerAdditionalMetricLatitude, centerAdditionalMetricLongitude);

            for (int i = 0; i < (NumberOfCoordinates - 1); i++)
            {
                int angleMin = (int)(((CircleDirection + 180) + startAngle + (i * interval)) % 360);
                //int angleMax = (int)(((CircleDirection + 180) + startAngle + ((i + 1) * interval)) % 360);
                int randomAngle = angleMin + _random.Next(0, (int)interval);

                double metricLatitude  = radius * Math.Sin(Common.DegreeToRadian(randomAngle));
                double metricLongitude = radius * Math.Cos(Common.DegreeToRadian(randomAngle));

                GeoCoordinate newPoint = GeoCoordinate.AddMetricDistance(circleCenter, metricLatitude, metricLongitude);
                ret.Add(newPoint);
            }

            return(ret);
        }
        public List <GeoCoordinate> GenerateRandomCirclePoints()
        {
            List <GeoCoordinate> Points = new List <GeoCoordinate>();

            int[] XValues = new int[NumberOfCoordinates];
            int[] YValues = new int[NumberOfCoordinates];

            int Radius         = Convert.ToInt32(MetricRadius / (2 * Math.PI));
            int DegreePerPoint = 360 / NumberOfCoordinates;

            Random random = new Random();

            for (int i = 0; i < 100; i++)
            {
                random.Next();
            }


            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < (NumberOfCoordinates / 4); j++)
                {
                    double DegreePointMinimum = j * DegreePerPoint;
                    double DegreePointMaximum = (j + 1) * DegreePerPoint;
                    double XMaximum           = Math.Cos(DegreePointMinimum) * Radius;
                    //double YMaximumAA = Math.Sin(DegreePointMaximum) * Radius;


                    int XValue = random.Next(0, (int)XMaximum);

                    double YMaximum;
                    if (XValue > (int)(Math.Cos(DegreePointMaximum) * Radius))
                    {
                        YMaximum = Math.Sin(DegreePointMaximum) * Radius;
                    }
                    else
                    {
                        YMaximum = Math.Tan(DegreePointMaximum) * XValue;
                    }

                    double YMinimum = Math.Tan(DegreePointMinimum) * XValue;


                    int YValue = random.Next((int)YMinimum, (int)YMaximum);

                    if (i == 1 || i == 2)
                    {
                        YValue = YValue * (-1);
                    }
                    if (i > 1)
                    {
                        XValue = XValue * (-1);
                    }

                    Points.Add(GeoCoordinate.AddMetricDistance(HomeCoordinate, YValue, XValue));
                }
            }

            return(Points);
        }