Как определить, является ли ребро вогнутым или выпуклым в 3d?

Я работаю с библиотекой OpenMesh в C ++. У меня есть функция, которая должна возвращать, является ли ребро вогнутым или выпуклым.

bool isConcave(HalfedgeHandle initial, Mesh & mesh){
FaceHandle face1 = mesh.face_handle(initial);
FaceHandle face2 = mesh.face_handle(mesh.opposite_halfedge_handle(initial));
long double angle = angleBetweenVectors(mesh.calc_face_normal(face1), mesh.calc_face_normal(face2));
if (angle >= (M_PI/2)){
cout << "Convex " << (angle * RADIANS_TO_DEGREES) << "\n";
return false;}
else{
cout << "Concave " << (angle * RADIANS_TO_DEGREES) << "\n";
return true;}}

где функция angleBetweenVectors (Vec3f, Vec3f) реализована как

return acosl(dot(vec1, vec2) / (vec1.norm() * vec2.norm()));

Но когда я запускаю это по различным краям куба, встроенного в руководство в OpenMesh у меня есть выходные данные «Вогнутых 0» и «Выпуклых 90», когда все ребра должны быть выпуклыми 90. Почему мой вывод неправильный?

0

Решение

Ну, на случай, если кто-то еще захочет узнать, так как я понял проблему …

Куб представляет собой треугольную сетку. Поэтому каждая грань куба фактически разбита на две треугольные грани. Таким образом, некоторые грани являются технически параллельными, давая угол между этими гранями равным 0 градусов.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector