我正在使用C ++中的库OpenMesh。我有一个函数,无论边缘是凹面还是凸面,都应该返回该函数。

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中内置的多维数据集的各个边缘上运行此命令时,当所有边缘均应为凸90时,输出为“凹0”和“凸90”。为什么我的输出不正确?

最佳答案

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

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

关于c++ - 如何确定3D边缘是凹面还是凸面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30620905/

10-11 12:29