double n1[3], n2[3];
BVector tmpn;
n1[0]=x3-x2; n1[1]=y3-y2; n1[2]=z3-z2;
n2[0]=x1-x2; n2[1]=y1-y2; n2[2]=z1-z2;
tmpn.CrossProduct(n1, n2);
tmpn.CopyToDblVec(Result.normal);
Нормаль к поверхности
Код:
Так я вычисляю нормаль к поверхности, заданной тремя точками (x1, y1, z1) (x2, y2, z2) (x3, y3, z3)
Код:
void CrossProduct( double vec1[3], double vec2[3] )
{
x = vec1[1]*vec2[2] - vec1[2]*vec2[1] ;
y = -(vec1[0]*vec2[2] - vec1[2]*vec2[0]) ;
z = vec1[0]*vec2[1] - vec1[1]*vec2[0] ;
}
{
x = vec1[1]*vec2[2] - vec1[2]*vec2[1] ;
y = -(vec1[0]*vec2[2] - vec1[2]*vec2[0]) ;
z = vec1[0]*vec2[1] - vec1[1]*vec2[0] ;
}
- функция CrossProduct()
Проблема в следующем: у меня плоскость задается точками:
( -1472 -1472 1600 ) ( -1472 960 1600 ) ( 1344 960 1600 )
Или я что-то не так делаю, или алгоритм вообще не правильный, но нормаль получается что-то вроде:
(0, 0, -6848512)
В чем у меня ошибка? Как правильно вычислить норсаль?
Нормальная нормаль. Разве только пронормировать что бы длина была равной еденице.