Я получаю странное значение, когда я пытался вычислить точки, чтобы нарисовать круг, используя диаметр и центральную точку - PullRequest
1 голос
/ 09 октября 2019

Это очень простые входные данные, и я получил правильную центральную точку и диаметр из алгоритма под названием Crystal-Pierce. Центральная точка равна 0,0 , а диаметр равен 2,82 ... . Конечная цель состоит в том, чтобы нарисовать круг, используя это на GmapController, когда я попробовал это с результатом, он не охватывал все выпуклые точки корпуса. Думая об этом, будет нарисован на карте, я должен рассмотреть какие-либо другие факторы? например, сколько GMAp увеличено?

входы

1,1
1,-1
-1, -1
-1, 1

это результат, который я получаю

Lat: 0|| Lon: 0|| diameter: 2.82842712474619
a: 1.4142135623731 || b: 0
a: 1.34499702392791 || b: 0.437016024448821
a: 1.14412280563537 || b: 0.831253875554907
a: 0.831253875554907 || b: 1.14412280563537
a: 0.437016024448821 || b: 1.34499702392791
a: 8.65956056235493E-17 || b: 1.4142135623731
a: -0.437016024448821 || b: 1.34499702392791
a: -0.831253875554907 || b: 1.14412280563537
a: -1.14412280563537 || b: 0.831253875554907
a: -1.34499702392791 || b: 0.437016024448821
a: -1.4142135623731 || b: 1.73191211247099E-16
a: -1.34499702392791 || b: -0.437016024448821
a: -1.14412280563537 || b: -0.831253875554907
a: -0.831253875554907 || b: -1.14412280563537
a: -0.437016024448821 || b: -1.34499702392791
a: -2.59786816870648E-16 || b: -1.4142135623731
a: 0.437016024448821 || b: -1.34499702392791
a: 0.831253875554907 || b: -1.14412280563537
a: 1.14412280563537 || b: -0.831253875554907
a: 1.34499702392791 || b: -0.437016024448821

Это код для кружения

static void Main (string[] args) {
            PlaceOfInterest p1 = new PlaceOfInterest (1, 1, 1, "");
            PlaceOfInterest p2 = new PlaceOfInterest (1, 1, -1, "");
            PlaceOfInterest p3 = new PlaceOfInterest (1, -1, 1, "");
            PlaceOfInterest p4 = new PlaceOfInterest (1, -1, -1, "");
            PlaceOfInterest p5 = new PlaceOfInterest (1, 0, 0, "");
            // PlaceOfInterest p6 = new PlaceOfInterest (1, 2, 2, "");
            List<PlaceOfInterest> list  = new List<PlaceOfInterest>();
            list.Add(p1);
            list.Add(p2);
            list.Add(p3);
            list.Add(p4);
            list.Add(p5);
             // list.Add(p6);
            List<PlaceOfInterest> hull = new List<PlaceOfInterest>();
            hull = ConvexHull.GrahmConvexHull(list);
            SEC.SmallestEnclosingCircle(hull);
            double x = SEC.centerPoint.Latitude;
            double y = SEC.centerPoint.Longitude;
            double diameter = SEC.diameter;
            Console.WriteLine("Lat: {0}|| Lon: {1}|| diameter: {2}", x, y, diameter);
            int segments = 20;

            double seg = Math.PI * 2 / segments;
            double aspect = 1;
            for (int i = 0; i < segments; i++)
            {
                double theta = seg * i;
                double radius = SEC.diameter / 2;
                double a = SEC.centerPoint.Latitude + Math.Cos(theta) * radius* aspect;
                double b = SEC.centerPoint.Longitude + Math.Sin(theta) * radius;
                Console.WriteLine("a: {0} || b: {1}", a,b);
            }



        }

...