Нахождение крайних точек - выпуклая оболочка с C# - PullRequest
2 голосов
/ 05 марта 2020

Я хочу найти крайние точки, и результат должен быть как это , но мой код дает мне этот вывод

Итак, я хочу изменить его, чтобы дать мне правильный вывод, как я могу это сделать? Большое спасибо!

 public override void Run(List<Point> points, List<Line> lines, List<Polygon> polygons, ref List<Point> outPoints, ref List<Line> outLines, ref List<Polygon> outPolygons)
        {
            List<Point> opoints = new List<Point>();
            HelperMethods helper = new HelperMethods();

            for (int i = 0; i < points.Count; i++)
            {
                for (int j = 0; j < points.Count; j++)
                {
                    for (int k = 0; k < points.Count; k++)
                    {
                        if (points[i] != points[j] && points[j] != points[k] && points[i] != points[k])
                        {
                            for (int p = 0; p < points.Count; p++)
                            {
                                if (i != p && j != p && k != p)
                                {
                                    if (HelperMethods.PointInTriangle(points[p], points[i], points[j], points[k]) == Enums.PointInPolygon.Inside)
                                    {
                                        opoints.Add(points[p]);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            outPoints = opoints;
        }

1 Ответ

0 голосов
/ 06 марта 2020

Если у кого-то есть такая же проблема, я решил ее и поделюсь решением, чтобы помочь другим.

В списке opoints все точки внутри выпуклой оболочки:

enter image description here

Но наша задача найти внешние точки выпуклой оболочки: enter image description here

Итак, мы можем сделать это с помощью l oop по всем точкам и отображать только точки, которых нет в списке opoints.

Вот код:

for (int m = 0; m < points.Count; m++)
{
   if (!opoints.Contains(points[m]))
       outPoints.Add(points[m]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...