Вопрос 1: почему точки в случайном порядке?Если они есть, вы должны упорядочить их так, чтобы соединение последовательных точек с прямыми линиями давало выпуклый многоугольник.Как их заказать - например, запустив алгоритм выпуклой оболочки (хотя, возможно, существуют и более простые методы).После того, как вы их заказали, вычислите площадь, как описано здесь .
-
Вопрос 2 проще.Полуплоскость определяется одной линией, имеющей неявное уравнение a*x+b*y+c=0
;все точки (x, y), для которых a*x+b*y+c <= 0
(обратите внимание на неравенство) находятся "за" полуплоскостью.Теперь вам нужно как минимум три плоскости, чтобы пересечение их отрицательных полупространств было замкнуто (это необходимое, но не достаточное условие).Если пересечение замкнуто, это будет выпуклый многоугольник.
Я предлагаю вам поддерживать связанный список вершин.Алгоритм инициализируется тремя строками.Вычислить три точки (в общем случае), где линии пересекаются;это начальные вершины вашего региона (треугольника).Вы также должны проверить, что каждая вершина находится «позади» полуплоскости, определенной линией, проходящей через две другие вершины;это гарантирует, что пересечение фактически является замкнутой областью.
Эти три вершины определяют также три ребра треугольника.Когда вы пересекаете новую полуплоскость, просто проверьте пересечение между линией, определяющей полуплоскость, и каждым из ребер текущей области;в общем случае вы получите две точки пересечения, но вы должны остерегаться вырожденных случаев, когда линия проходит через вершину области.(Вы также можете получить пустой набор!)
Новые вершины пересечения определяют линию, которая разделяет текущую область на две области.Опять же, используйте ориентацию новой полуплоскости, чтобы решить, какую из двух новых областей назначить новой «текущей области», а какую отбросить.
Точки в списке, определяющие края области.текущий регион будет правильно упорядочен, так что вы можете применить формулу в приведенной выше ссылке для вычисления его площади.
Если это описание не является подробным / понятным, следующий лучший совет, который я могу вам дать, - это инвестироватькнига по вычислительной геометрии и линейной алгебре.