Замечательные точки треугольника
Биссектриса, вписанная и описанная окружности, центр масс. Четыре формулы, которые выводятся, а не запоминаются.
2 мин
Школьные построения циркулем в программе не нужны: у каждой замечательной точки есть формула в координатах.
Биссектриса угла
Биссектриса угла с вершиной и лучами на и идёт по направлению суммы единичных векторов:
Почему так: сумма двух единичных векторов — диагональ ромба, а диагональ ромба делит его угол пополам.
Если сложить не единичные, а исходные векторы, длины перекосят направление. Насколько сильно — видно на примере , , : сумма исходных векторов даёт направление , которое делит прямой угол на 5,71° и 84,29° вместо 45° и 45°.
Point d = normalized(Y - X) + normalized(Z - X);
Line bisector = lineThrough(X, X + d);
Вписанная окружность
Центр вписанной окружности (точка пересечения биссектрис) выражается через длины сторон как взвешенное среднее вершин:
где , , — стороны, противолежащие вершинам. Радиус равен , где — площадь, а — полупериметр.
Это и есть ответ на задачу «привязать козла в треугольном огороде так, чтобы площадь выпаса была наибольшей»: наибольший круг, помещающийся в треугольник, — вписанный.
Описанная окружность
Центр описанной — точка пересечения серединных перпендикуляров. В координатах, если перенести начало в и обозначить , :
где , а — векторное произведение. Знаменатель равен нулю ровно тогда, когда точки лежат на одной прямой и окружности не существует.
Центр масс
Самая простая из четырёх: . Для многоугольника формула другая — центр масс вершин и центр масс площади не совпадают.
Что проверять в решении
| точка | вырожденный случай | признак |
|---|---|---|
| биссектриса | или совпал с | нулевая длина при нормировке |
| вписанная | точки на одной прямой | нулевая площадь |
| описанная | точки на одной прямой | нулевое векторное произведение |
| центр масс | нет | — |
Первые три требуют деления, и все три делят на величину, которая обращается в ноль на вырожденном входе. Проверяйте её до деления, а не после.