我正在使用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/