//计算两条边的夹角,点乘求cosα,叉积求法向量并返回 // 计算两条边的夹角 double cal_ang(MyMesh::Normal v1,MyMesh::Normal v2, MyMesh* mesh, MyMesh::HalfedgeHandle he) { double innerP = v1 | v2/(v1.length() * v2.length()); //点乘求cosa auto n = v2 % v1; double angle = acos(innerP) * 180 / pi; MyMesh::FaceHandle face = mesh->face_handle(he); auto neighborFaceNormal = mesh->calc_face_normal(mesh->opposite_face_handle(he)); auto temp = n | neighborFaceNormal; if (temp < 0) {angle = 360 - angle;} return angle; //叉积求法向量并返回 }
时间: 2023-06-12 14:08:17 浏览: 184
Bezier_c/C++_
这段代码通过点乘求出两个向量的夹角,同时使用叉积求出这两个向量的法向量。首先,通过点乘公式计算出两个向量的内积,然后通过向量的长度计算出它们的余弦值。接下来,使用叉积公式求出这两个向量的法向量,然后计算这个法向量与相邻面的法向量之间的点积,如果点积小于0,说明两个向量在相邻面的法向量的两侧,需要将夹角调整为360度减去原始夹角,最终返回调整后的夹角值。
阅读全文