济宁网站建设价格,网站做跳转微信打开,二级建造师证书查询入口,天猫商城计算三角形的面积 简介#xff1a;今天比较郁闷#xff0c;计算平均曲率流使图形光顺的时候#xff0c;没有成功。#xff08;.#xff09; 向量求面积 百度百科链接中的9根据向量求面积 double vfarea(MyMesh mesh, MyMesh::VertexHandle vh) {typedef typename MyM… 计算三角形的面积 简介今天比较郁闷计算平均曲率流使图形光顺的时候没有成功。. 向量求面积 百度百科链接中的9根据向量求面积 double vfarea(MyMesh mesh, MyMesh::VertexHandle vh) {typedef typename MyMesh::Point p_t;typedef typename MyMesh::VertexHandle vh_t;typedef typename MyMesh::HalfedgeHandle hh_t;typename MyMesh::VertexFaceIter vf_it;//点邻接的面typename MyMesh::FaceVertexIter fv_it;//面上的点double area 0.0;for (vf_it mesh.vf_iter(vh); vf_it.is_valid(); vf_it) {//关于点邻接的面fv_it mesh.fv_iter(*vf_it);//得到面上的点const p_t P mesh.point(*fv_it); fv_it;const p_t Q mesh.point(*fv_it); fv_it;const p_t R mesh.point(*fv_it);area ((Q - P) % (R - P)).norm() * 0.5f;//两个向量的叉乘的向量值的一半就是三角形的面积}cout [Debug] area is area std::endl;return fabs(area) std::numeric_limitsdouble::min() ? area : 1e-8;
} 其中有引出OpenMesh的叉乘和点乘 参考链接 博客园 其中得知 Scalar length() const //compute euclidean norm
Scalar norm() const //compute euclidean norm 计算出来的长度就是 sqrt (a*a b*b c*c)的长度 点乘叉乘内积外积 MyMesh::Normal p(1,-3,2), q(0,2,4);
coutdot product : (p | q) endl;
coutcross product : (p % q) endl;
向量 p(x1,y1,z1), q(x2,y2,z2)
点乘内积x1*x2 y1*y2 z1*z2
叉乘外积(y1*z2-y2*z1, x2*z1-x1*z2, x1*y2-x2*y1) 得到 p | q 是点乘 p % q 是叉乘 另外提供一种 海伦公式计算三角形面积的方法 公式来源惨遭百度百科 double calcAreaOfThreePoints(const OpenMesh::Vec3f a, const OpenMesh::Vec3f b, const OpenMesh::Vec3f c) {//应用海伦公式 S1/4sqrt[(abc)(ab-c)(ac-b)(bc-a)]double lenA sqrt(pow(b[0] - c[0], 2) pow(b[1] - c[1], 2) pow(b[2] - c[2], 2));// b - c 两点的坐标double lenB sqrt(pow(a[0] - c[0], 2) pow(a[1] - c[1], 2) pow(a[2] - c[2], 2));// a - c 两点的坐标double lenC sqrt(pow(b[0] - a[0], 2) pow(b[1] - a[1], 2) pow(b[2] - a[2], 2));// a - b 两点的坐标double Area 1.0 / 4.0 * sqrt((lenA lenB lenC) * (lenA lenB - lenC) * (lenA lenC - lenB) * (lenB lenC - lenA));return Area;
} 转载于:https://www.cnblogs.com/eat-too-much/p/11265885.html