Двойная площадь треугольника на школьной карте

тема: Геометрия (формулы) · уровень: средний

Условие

На школьной карте отметили три места: вход в школу A, спортзал B и столовую C. Завуч попросил посчитать «площадь» треугольника ABC, но чтобы не возиться с дробями, просит вывести удвоенную площадь (то есть величину, равную площади, умноженной на 2).

Координаты целые, могут быть большими: в других языках может понадобиться 64-битный тип (как на олимпиадах), потому что промежуточные значения не обязаны помещаться в 32 бита.

Формат ввода

В одной строке 6 целых чисел: x1 y1 x2 y2 x3 y3 — координаты точек A(x1, y1), B(x2, y2), C(x3, y3).

Формат вывода

Выведите одно целое число — удвоенную площадь треугольника ABC.

Ограничения

Пример

Ввод:

0 0 1 0 0 1

Вывод:

1

Как решать — идея подхода

Приём: Векторное произведение (ориентированная площадь)

Заметь: «удвоенная площадь» треугольника на координатной плоскости удобно считается без дробей через ориентированную площадь. Если взять два вектора из одной вершины, например AB = (x2-x1, y2-y1) и AC = (x3-x1, y3-y1), то их псевдоскалярное (в 2D) векторное произведение AB x AC = (x2-x1)*(y3-y1) - (y2-y1)*(x3-x1) даёт площадь параллелограмма со сторонами AB и AC со знаком. А площадь треугольника — в 2 раза меньше, значит удвоенная площадь треугольника как раз равна abs(AB x AC).

Почему работает: формула — это частный случай «шнуровки»/детерминанта 2x2; знак показывает ориентацию (по часовой/против), а модуль убирает знак.

План:

Сложность: O(1) по времени и памяти.

Частая ошибка: забыть abs(...) (тогда получится отрицательное число при «обратном» обходе точек) или перепутать порядок вычитания в формуле (знак меняется). Также в некоторых языках нужен 64-битный тип, потому что произведения могут быть большими.

Разберись руками

Точки на карте: A(0,0) — вход, B(1,0) — спортзал, C(0,1) — столовая. Надо вывести удвоенную площадь треугольника ABC, чтобы не появлялись дроби.

Идея: Сдвинь мыслью одну вершину в точку A и посмотри на два шага из A к двум другим точкам. Построй параллелограмм на этих двух шагах: его площадь считается целым числом, без половинок. У треугольника удвоенная площадь ровно равна площади этого параллелограмма; если получилось отрицательно из-за направления, берут по модулю.

Решить задачу с автопроверкой на Python →

Куда дальше