У меня есть 2D-план с целочисленными координатами.
На этом плане есть много точек, разделенных на три категории.
- "Источник".Существует только одна точка, которая является источником.
- Группа Ниццы, содержащая неизвестное (но разумное) количество точек
- Группа Зла, содержащая неизвестное (но разумное) числоОчки
Прежде всего я пытаюсь выяснить (да / нет), находятся ли две группы в отдельных полушариях.
Если бы вы могли провести линию черезИсточник (синий на изображениях), так что все хорошее находится на одной стороне, а все зло - на другой, тогда они рассматриваются в разных полушариях.Если ни одну из этих групп нельзя поставить на ту же сторону, что и остальные, это неверно.
Второй шаг - выяснить угол этого полушария.В первом примере (ниже) я нарисовал угол 180 градусов (прямая линия), но я хотел бы рассчитать наиболее несбалансированный угол (близкий к 0), который позволил бы идеально разделить группы.Линия тогда будет двумя половинками, начинающимися с источника, идущего в бесконечность.Я хочу знать наименьший угол (то есть, по логике, наибольший угол, если вы измеряете другую сторону), при котором первый тест остается истинным
Примеры:
1:
2:
3:
Сейчас я могу,через код, чтобы вычислить угол между каждой отдельной точкой и источником.Я застрял в том, чтобы выяснить, как проверить «единство» групп и, самое главное, отсутствие члена другой группы между ними.
Я работаю в C #, но этот вопрос действительнобольше об алгоритме (я не могу думать о рабочем), поэтому я приму любой ответ, который решает проблему на любом (читаемом) языке, включая псевдокод или текстовое объяснение.
Всеиз точек, в контексте, сложные объекты, которые включают координаты X и Y.Другие атрибуты не имеют отношения к вопросу, так как они уже разделены в требуемых группах (источник один, а для остальных есть два списка).