Из статьи Касательная к кривой можно узнать о том, что координаты касательного вектора к кривой равны производным координат x'(t), y'(t), z'(t) по параметру t.
Неявное уравнение поверхности выглядит так F(x, y, z) = 0. Рассмотрим какую-нибудь кривую x(t), y(t), z(t), лежащую на поверхности F. Возьмем производную обеих частей уравнения по параметру t и получим:
F'xx't + F'yy't + F'zz't = 0. Нижний индекс - это переменная, по которой берется производная.
Вектор N=(F'x, F'y, F'z) очевидно перпендикулярен вектору касательной T=(x't, y't, z't) к кривой в этой точке (x, y, z). Мы можем через эту точку провести бесконечно много разных кривых и брать производные от F(x, y, z) = 0. Всегда касательная к кривой будет перпендикулярна вектору N=(F'x, F'y, F'z). Отсюда следует, что все касательные к кривым в данной точке поверхности лежат в одной плоскости, а вектор N=(F'x, F'y, F'z) является нормалью к поверхности в этой точке. Но в общем случае, не единичной нормалью.
Как задать точку на поверхности? Имея один параметр u, мы можем задать одну кривую. Введем зависимость x=x(u), y=y(u), z=z(u). Она определяет одну кривую. Рассмотрим другой параметр v, который меняется независимо от u. Переменные x, y, z должны зависеть от v по-другому закону, иначе получится таже кривая. Обозначим другой закон зависимости x, y, z от параметра v так: x=x(v), y=y(v), z=z(v). Эта зависимость определяет другую кривую. Итак, возьмем две кривые на поверхности. Точка их пересечения будет иметь касательные к обеим кривым: r'(u) = (x'u, y'u, z'u) и r'(v) = (x'v, y'v, z'v). Нормаль в точке, как сказано выше, перпендикулярна касательным всех кривых в этой точке. Заметим, что векторное произведение [r'u, r'v] от касательных векторов r'u и r'v также перпендикулярно к ним обоим, значит, тоже определяет нормаль. Координаты векторного произведения:
[r'u, r'v] = (y'uz'v - z'uy'v, z'ux'v - x'uz'v, x'uy'v - y'ux'v). Поверхность можно задать как z = f(x, y). Для этого выразим:
u = x, v = y. Тогда, [r'u, r'v] = [r'x, r'y] = (y'xz'y - z'xy'y, z'xx'y - x'xz'y, x'xy'y - y'xx'y) или [r'u, r'v] =(-f'x, -f'y, 1). Найдем координаты единичной нормали, для этого нужно поделить каждую координату на длину вектора нормали. Координаты единичной нормали также являются косинусами углов его с осями координат. Поэтому, пишем:
cos(N,x) = -f'x / √((f'x)2+ (f'y)2 + 1);
cos(N,y) = -f'y / √((f'x)2+ (f'y)2 + 1);
cos(N,z) = 1 / √((f'x)2+ (f'y)2 + 1).
Кстати, если принять z = f(x, y), то координаты вектора нормали можно найти из неявного уравнения:
F(x, y, z) = f(x, y) - z = 0
Дифференцируем по t:
f'xx't + f'yy't - z't = 0.
Умножаем уравнение на -1:
-f'xx't - f'yy't + z't = 0.
Скалярное произведение вектора (-f'x, - f'y, 1) на вектор касательной T=(x't, y't, z't) равно нулю. Значит, вектор
(-f'x, - f'y, 1) - нормаль. Если поделить координаты на модуль, получим единичную нормаль, как выше.