如何确定边缘在 3d 中是凹的还是凸的?

How to determine if an edge is concave or convex in 3d?

我正在使用 C++ 中的 OpenMesh 库。我有一个函数,它应该 return 无论边是凹的还是凸的。

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 上 tutorial 中构建的立方体的各个边缘上时,我有 "Concave 0" 和 "Convex 90," 的输出,当所有边缘应该是凸90。为什么我的输出不正确?

好吧,以防万一其他人想知道,因为我意识到了这个问题...

立方体是三角形网格。因此,立方体的每个面实际上都分成两个三角形面。因此,一些面在技术上是平行的,这些面之间的角度为 0 度。