Я пытаюсь решить довольно сложную для меня проблему. Я не новичок в программировании, но я действительно не знаю, как понять эту проблему. Ему задан набор точек (точка []) с координатами Xi и Yi в качестве входных данных. Программа должна выводить длину окружности выпуклой оболочки многоугольника, но при необходимости может разделить эту оболочку на две части, на две отдельные выпуклые оболочки, каждая из которых будет содержать некоторое количество точек. Целью этого деления является получение более короткой окружности (если сумма окружностей этих двух корпусов короче окружности одного корпуса, например: два кластера точек далеко друг от друга). Проблема также в том, что не может быть больше двух корпусов. Буду признателен за любые идеи.
Вот простая иллюстрация этой проблемы (моментов может быть намного больше). Здесь вы можете видеть, что окружность двух отдельных корпусов короче окружности одного.
ДОБАВИТЬ: На самом деле, под «окружностью» я подразумеваю периметр.
Вот ключевая часть моего кода:
m.x = (a.x + b.x)/2;
m.y = (a.y + b.y)/2;
ab.first = b.x - a.x;
ab.second = b.y - a.y;
for (i=0; i<n; ++i)
{
if (p[i].x * ab.first + p[i].y * ab.second - (SQ(ab.second) + SQ(ab.first))/2 > 0)
left[l++]=p[i];
else if (p[i].x * ab.first + p[i].y * ab.second - (SQ(ab.second) + SQ(ab.first))/2 < 0)
right[r++]=p[i];
if (p[i].x * ab.first + p[i].y * ab.second - (SQ(ab.second) + SQ(ab.first))/2 == 0)
mid[md++]=p[i];
}
hull1 + hull2 < big hull
? - person sdasdadas   schedule 01.11.2013<===>
, который можно разделить на<
и>
? это говорит о том, что может сработать разрыв двух самых больших несмежных ребер. - person andrew cooke   schedule 01.11.2013