Нахождение значения в определенной точке (внутри) треугольника
К примеру у меня есть треугольник с вершинами A B C. Каждая из этих вершин ассоциирована с некоторым значением (абстрагируемся от типа этого значения - главное, что он подвержен линейной интерполяции): x, y, z - для каждой из вершин соответственно. Также есть некоторая точка D лежащая внутри треугольника или на одной стороне треугольника. Как максимально просто (за меньшее количество действий) найти значение в точке D?
Ответы (1 шт):
Уравнение плоскости через 3 точки - Ax+By+С=z (в таком виде, чтоб легче считать), получаем отсюда A,B,C из решения системы трех уравнений
A*x1+B*y1+C == z1
A*x2+B*y2+C == z2
A*x3+B*y3+C == z3
Ну, а потом просто подставляем x,y и получаем...
Если не ошибся в расчетах -
double tri(double x, double y,
double x1, double y1, double z1,
double x2, double y2, double z2,
double x3, double y3, double z3)
{
double q = (x2-x3)*y1 - (x1-x3)*y2 + (x1-x2)*y3;
double A = (y3-y2)*z1 + (y1-y3)*z2 - (y1-y2)*z3;
double B = (x2-x3)*z1 + (x3-x1)*z2 + (x1-x2)*z3;
double C = (x3*y2-x2*y3)*z1 - (x3*y1-x1*y3)*z2 + (x2*y1-x1*y2)*z3;
return (A*x+B*y+C)/q;
}
Само собой, если расчетов много - то можно рассчитать A,B,C,q один раз и считать значения для разных точек...
Если q==0 - дело плохо, три точки на одной прямой...
Для конкретно сторон (точек на сторонах) можно упростить - там третья точка не нужна, просто записать уравнение прямой достаточно.