§ Вектор нормали

В предыдущей статье, написанной очень давно, было описание того, как найти расстояние от точки до прямой. Теперь есть повод расширить возможности и найти расстояние от точки до плоскости, в трехмерном пространстве. Задать плоскость можно разными методами, в том числе через параметры.
Существует общее уравнение плоскости и записывается оно так:
A x + B x + C y + D = 0
Где A,B,C и D это коэффициенты, при этом вектор, который составлен из (A,B,C), перпендикулярен к плоскости, и это очень важно. Для начала, задача заключается в том, чтобы найти эти коэффициенты, чтобы рассчитать нормаль. Это делается довольно просто. Если есть неких два вектора \vec{AB} и \vec{AC} , исходящих из одной точки, то выполнив операцию смешанного произведения, получим заданные коэффициенты.
\begin{vmatrix} x & y & z \\ x_2-x_1 & y_2-y_1 & z_2-z_1 \\ x_3-x_1 & y_3-y_1 & z_3-z_1 \end{vmatrix} = \begin{vmatrix} x & y & z \\ AB_x & AB_y & AB_z \\ AC_x & AC_y & AC_z \end{vmatrix}
Рассчитать детерминант у матрицы 3x3 не составит трудностей, если воспользоваться ускоренными методами поиска определителей, зная курс высшей математики, конечно же.
x(AB_y AC_z - AB_z AC_y) - y(AB_x AC_z - AB_z AC_x) + z(AB_x AC_y - AB_y AC_x)
Как можно отметить, ищем мы пока что только перпендикулярный вектор, а не общее уравнение плоскости, хотя и ее тоже можно найти, достаточно лишь подставить -(x1,y1,z1) в первую строку определителя. Получим следующие параметры:
A = AB.y*AC.z - AB.z*AC.y
B = AB.z*AC.x - AB.x*AC.z
C = AB.x*AC.y - AB.y*AC.x
Это потребуется для дальнейших вычислений.

§ Общее уравнение плоскости

Теперь неплохо бы составить общее уравнение плоскости. Поскольку миноры и алгебраические дополнения успешно подсчитаны, составить уравнение плоскости в общем виде не составит никакого труда. Плоскость можно представить как 3 точки A(x_0,y_0,z_0) , B(x_1,y_1,z_1) , C(x_2,y_2,z_2) , причем точка A является общей для векторов \vec{AB} и \vec{AC} .
\begin{vmatrix} x - x_0 & y - y_0 & z - z_0 \\ x_1-x_0 & y_1-y_0 & z_1-z_0 \\ x_2-x_0 & y_2-y_0 & z_2-z_0 \end{vmatrix} = \begin{vmatrix} x - x_0 & y - y_0 & z - z_0 \\ AB_x & AB_y & AB_z \\ AC_x & AC_y & AC_z \end{vmatrix} = 0
Коэффициенты миноров были подсчитаны, так что можно сказать вот что.
A(x - x_0) + B(y - y_0) + C(z - z_0) = 0
Собственно, после раскрытия скобок получится следующее:
A x + B y + C z - (A x_0 + B y_0 + C z_0) = 0
Как видно, последнее выражение в скобках это и будет D = -(A x_0 + B y_0 + C z_0) , что даёт общее уравнение плоскости, записанное ранее.

§ Вычисление расстояния от точки до плоскости

Для начала, необходимо сделать вот что. У нас есть вектор N с компонентами (A,B,C) — но он не нормализован, то есть, не является единичной длины. Чтобы нормализовать вектор, надо разделить каждый его компонент на r = \sqrt{A^2 + B^2 + C^2} — то есть, делить на длину исходного вектора, чтобы получить нормализованный (единичной длины). Так мы получим именно нормаль. Обозначу этот компонент через r, чтобы не занимать места в выводе формул.
Когда нормализованный вектор был получен, наша задача в том, чтобы от исходной точки, от которой ищем расстояние до плоскости, провести прямую до плоскости, параметрическую:
x = M.x + t*(A/r)
y = M.y + t*(B/r)
z = M.z + t*(C/r)
Здесь в качестве коэффициентов к t выступают компоненты нормализованного вектора N=(\frac{A}{r}, \frac{B}{r}, \frac{C}{r}) .
Для нахождения пересечения прямой с плоскостью нужно подставить (x,y,z) в общее уравнение прямой Ax + By + Cz + D = 0:
A(M_x + t\frac{A}{r}) + B(M_y + t\frac{B}{r}) + C(M_z + t\frac{C}{r}) + D = 0
Теперь раскладываем на подобные множители, объединяя t.
A M_x + B M_y + C M_z + D + t\left(\frac{A^2 + B^2 + C^2}{\sqrt{A^2 + B^2 + C^2}}\right) = 0
Если вспомнить правило \frac{a}{\sqrt{a}} = \sqrt{a} , то формула превратится в такой вид.
A M_x + B M_y + C M_z + D = -t \sqrt{A^2 + B^2 + C^2}
Отсюда легко найти t:
t = \frac{|A M_x + B M_y + C M_z + D|}{\sqrt{A^2 + B^2 + C^2}}
Я намеренно убрал минус, поскольку расстояние не может быть отрицательным. Вот и всё, что надо знать о выводе формулы.

§ Дополнение

Эта формула интересна еще там, что по ней легко можно рассчитать, с какой стороны находится точка по отношению к плоскости. Для этого необходимо лишь подсчитать знак числителя. Если число получилось положительным, то точка лежит с одной стороны, если отрицательным — то с другой. Если равным 0, то на плоскости.