Как определить форму полукруга по заданному набору точек? - PullRequest
0 голосов
/ 05 октября 2018

Вот точечная коллекция полигонов

<Polygon Points="24,188,24,183,25,176,26,172,29,166,33,160,38,155,44,151,50,148,54,147,61,146,67,146,74,147,78,148,84,151,90,155,95,160,99,166,102,172,103,176,104,183,104,188" Stroke="Black" StrokeThickness="1" />
<Polygon Points="568,263,520,263,520,256,521,253,523,249,526,245,531,241,536,239,540,238,548,238,552,239,557,241,562,245,565,249,567,253,568,256,568,263" Stroke="Black" StrokeThickness="1" />

, которая дает мне следующие формы.

enter image description here

enter image description here

Мне нужно проверить форму полукруга или нет?Пожалуйста, кто-нибудь может направить меня, чтобы определить.Это полукруг?

Я получу коллекцию только до рисования, только я должен определить формы.Это может быть любой (прямоугольник, линия, полукруг, кривая и т. Д.). Я могу найти форму прямоугольника, треугольника и линий из набора точек.Как и для прямоугольника, я проверяю, что его противоположные грани должны быть равны, а внутренний угол должен быть 90 градусов.

  public bool IsRectangle()
        {                
            var pointColl = polygon.PointCollection;
            bool isRightAngle = false;

            if (polygon == null || pointColl == null)
            {
                return false;
            }
            if (pointColl.Count == 5)
            {
                double length1 = (pointColl[0] - pointColl[1]).LengthSquared;
                double width1 = (pointColl[1] - pointColl[2]).LengthSquared;
                double length2 = (pointColl[2] - pointColl[3]).LengthSquared;
                double width2 = (pointColl[3] - pointColl[0]).LengthSquared;

                if ((length1 == length2 && length1 != 0) && (width1 == width2 && width1 != 0))
                    isRightAngle = CalculateAngle(polygon);
            }
            else
            {
                isRightAngle = false;
            }

Могу ли я написать что-то подобное для обнаружения полукруга или круглой формы?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Алгоритм:

1) Возьмите 3 точки из многоугольника.

2) Оцените из них окружность, используя этот метод (или любой другой).

3) Проверьте, не находятся ли другие точки из данного полигона на предполагаемом круге.

0 голосов
/ 05 октября 2018

Что определяет форму как полукруг?

В истинном смысле этого слова ни одна из ваших фигур не является полукругом, так как они состоят из отрезков прямых линий.

Сколько точек форму нужно считать полукругом (достаточно ли треугольник достаточно круглый).Какова погрешность каждой точки на окружности (некоторый процент от радиуса) до того, как форма больше не считается полукруглой.

Какой-то псевдокод для вас ...

  1. Учитывая набор из n точек P1, P2 .. Pn
  2. Для каждой пары точек рассчитайте расстояние между ними.
  3. Две точки с максимальным расстоянием между ними (Pa & Pb) считаются диаметром (плоской стороной) полукруга.
  4. Центральная точка полукругасредняя точка между Pa и Pb.
  5. Расстояние от Pa & Pb до центральной точки равно радиусу R.
  6. Для каждой оставшейся точки в коллекции рассчитайте расстояние до центральной точки.Если это расстояние лежит в пределах (1 +/- e) * R для всех точек, то форма представляет собой полукруг.Значение e оставлено для вас, чтобы определить.

Обратите внимание, что этот метод будет работать независимо от ориентации полукруга.Если вам нужно что-то более конкретное, проверьте также наклон линии от Па до Pb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...