1. Эвристика для определения формы
Не существует уникального решения, поэтому нет простого алгоритма. Вы можете попытаться каким-то образом подражать вашей интуиции.
- начать со случайной точки и соединить каждую точку с ближайшим соседом. Затем подключите последнюю точку к первой.
- начните с выбора точки и ее ближайшего соседа и соедините их линией. Теперь итеративно добавьте еще один пункт. Всегда выбирайте точку, которая минимизирует угол между последним отрезком и вновь добавленным отрезком.
Оба метода на самом деле не работают вообще, они даже не гарантируют избежание пересечений. Вы можете попытаться решить эту проблему путем обратного отслеживания, если вы обнаружите явную ошибку (например, пересечение), затем вернитесь к последней точке решения и воспользуетесь подходом «второй лучший», ....
Но опять же, поскольку решение не уникально, не ожидайте слишком многого от этой эвристики.
2. Среднее по вершинам
Среднюю точку для вершин легко вычислить. Просто сложите все баллы вместе и разделите на количество баллов, которое вы только что добавили, это среднее значение. Что вас, вероятно, больше всего интересует, так это центральная точка в смысле «центра масс», см. Ниже.
3. Центральная точка
Чтобы определить центр масс, сначала нужно определить форму. Это означает, что вы должны сделать что-то вроде шага 1.
Легко реализуемый метод для вычисления центральной точки с учетом многоугольника.
- Поместите ограничивающий прямоугольник вокруг многоугольника.
- Случайно генерировать точки внутри ограничительной рамки.
- Для каждого из этих пунктов определите, находится ли он внутри ограничительной рамки, если нет, то выбросьте его. Чтобы определить, находится ли точка внутри произвольного многоугольника, используйте тест ray .
- Для всех сохраненных вами точек примените подход 2. Средняя точка этих точек является хорошим приближением к центральной точке.