Предполагая, что вы хотите вектор нормали для квадрата, этот псевдокод работает
Vector3d vertex[4] = { ... }
Vector3d normal(0,0,0) ;
for (int i=0; i<4; i++)
{
normal += cross (vertex[i], vertex[(i+1)%4]) ; // cross product
}
normalize (normal) ;
// normal is the unit normal to the quad
Это дает формулу n=A/|A|
, где A = v0xv1 + v1xv2 + v2xv3 + v3xv0
и vi=vertex[i]
). |A|/2
также является площадью многоугольника. Это можно обобщить для произвольных многоугольников и даже даст разумные результаты для неплоских многоугольников, если они не слишком неплоские.
Одна ссылка http://softsurfer.com/Archive/algorithm_0101/algorithm_0101.htm
Если вы знаете, что квад / многоугольник является плоским, вам нужно только вычислить нормаль треугольника, образованного первыми тремя вершинами. Это A1/|A1|
, где A1 = (v1-v0)x(v2-v0) = v0xv1 + v1xv2 + v2xv0
.
Если под «нормализацией квадратов» вы подразумевали что-то еще, просто проигнорируйте этот ответ.
РЕДАКТИРОВАТЬ: Я нашел этот связанный вопрос: Получить площадь поверхности многогранника (3D-объект)