Углы треугольников 3D-сетки с использованием #CGAL

Я хотел бы знать, можно ли вычислить углы треугольников трехмерной сетки (представленной в виде графика) с помощью функции CGAL?

Спасибо


person ananass    schedule 03.04.2015    source источник
comment
Вы хотите вычислить углы треугольника или вычислить статистику углов треугольников?   -  person lrineau    schedule 07.04.2015
comment
Я хочу вычислить углы в треугольниках   -  person ananass    schedule 08.04.2015
comment
В 2D или 3D? Ответ будет другим. Пожалуйста, измените сообщение с вопросом, используя кнопку редактирования под ним.   -  person lrineau    schedule 08.04.2015
comment
хорошо, я внес изменения   -  person ananass    schedule 08.04.2015


Ответы (1)


Если у вас есть невырожденный треугольник с тремя точками a, b и c, угол треугольника, косинус угла при a является скалярным произведением двух векторов, деленных на их длины:

CGAL::Vector_3<K> v1 = b - a;
CGAL::Vector_3<K> v2 = c - a;
double cosine = v1 * v2 / CGAL::sqrt(v1*v1) / CGAL::sqrt(v2 * v2);

где K — это тип ядра, которое вы используете для точек. Сам угол в радиусе можно вычислить следующим образом:

double angle = std::acos(cosine);

Конечно, для вырожденных треугольников длины могут быть равны нулю, и приведенное выше выражение будет вычислять 0./0. (то есть не-число). С этим случаем нужно разбираться отдельно.

person lrineau    schedule 08.04.2015