Вычислительная геометрия

Векторное произведение, площадь многоугольника и выпуклая оболочка.

Почти вся олимпиадная геометрия строится на одном инструменте — векторном (косом) произведении: cross(O, A, B) = (A - O) × (B - O) = (Ax-Ox)(By-Oy) - (Ay-Oy)(Bx-Ox) Его знак говорит, куда поворачивает ломаная O→A→B: плюс — против часовой стрелки, минус — по часовой, ноль — три точки на одной прямой. А модуль равен удвоенной площади треугольника OAB. Первое применение — площадь любого многоугольника («формула шнурков»): сумма косых произведений последовательных вершин.

Площадь многоугольника. Введите: 4, затем вершины по контуру: 0 0, 4 0, 4 3, 0 3

Прямоугольник 4×3 даёт 12. Заметьте: всё считается в ЦЕЛЫХ числах — храним удвоенную площадь и делим только при выводе. Золотое правило геометрии: оставайтесь в целых числах как можно дольше, double с его погрешностями — источник самых коварных багов. Вторая классика — выпуклая оболочка: минимальный выпуклый многоугольник, содержащий все точки. Алгоритм Эндрю (monotone chain): сортируем точки по x, строим нижнюю цепочку слева направо, выкидывая точки, дающие «не тот» поворот, затем верхнюю — справа налево. O(n log n) на сортировку.

Выпуклая оболочка. Введите: 6, затем точки: 0 0, 2 0, 1 1, 2 2, 0 2, 1 -1

На примере внутренняя точка (1,1) исчезает, остаются пять вершин оболочки в порядке обхода против часовой стрелки. Условие cross <= 0 выбрасывает и точки на прямой; замените на < 0, если коллинеарные точки нужно оставлять. Задание: по готовой оболочке посчитайте её площадь формулой шнурков — две темы урока соединятся в одно решение. Отметьте урок пройденным — вы прошли весь путь олимпиадника! Дальше — практика: решайте задачи, участвуйте в соревнованиях и возвращайтесь к урокам как к справочнику. Удачи!
Доска