在openmesh中计算三角形的面积
calculate the area of a triangle in openmesh
这是 "Polygon mesh process" 示例中的一个片段:
for (v_it=mesh_.vertices_begin(); v_it!=v_end; ++v_it) {
area = 0.0;
for (vf_it=mesh_.vf_iter(v_it); vf_it; ++vf_it)
{
fv_it = mesh_.fv_iter(vf_it);
const Mesh::Point& P = mesh_.point(fv_it); ++fv_it;
const Mesh::Point& Q = mesh_.point(fv_it); ++fv_it;
const Mesh::Point& R = mesh_.point(fv_it);
area += ((Q-P)%(R-P)).norm() * 0.5f * 0.3333f; // norm: compute euclidean norm, return Scalar
}
weight(v_it) = (fabs(area)>FLT_MIN ? 1.0 / (2.0 * area) : 0.0);
}
为什么最后乘以0.3333f?
您可能知道,((Q-P)%(R-P)).norm() * 0.5f
部分只是 Q
、P
和 R
.[=14= 所跨越的三角形的面积]
看来,在这个例子中,顶点权重与假设为每个顶点的表面面积成正比 "belong" 被计算出来。假定任何入射三角形面积的三分之一都对这个特定的顶点有贡献。 (其他三分之二被认为属于入射到相应三角形的其他两个顶点。)因此您的因子(大约)1/3。
这是 "Polygon mesh process" 示例中的一个片段:
for (v_it=mesh_.vertices_begin(); v_it!=v_end; ++v_it) {
area = 0.0;
for (vf_it=mesh_.vf_iter(v_it); vf_it; ++vf_it)
{
fv_it = mesh_.fv_iter(vf_it);
const Mesh::Point& P = mesh_.point(fv_it); ++fv_it;
const Mesh::Point& Q = mesh_.point(fv_it); ++fv_it;
const Mesh::Point& R = mesh_.point(fv_it);
area += ((Q-P)%(R-P)).norm() * 0.5f * 0.3333f; // norm: compute euclidean norm, return Scalar
}
weight(v_it) = (fabs(area)>FLT_MIN ? 1.0 / (2.0 * area) : 0.0);
}
为什么最后乘以0.3333f?
您可能知道,((Q-P)%(R-P)).norm() * 0.5f
部分只是 Q
、P
和 R
.[=14= 所跨越的三角形的面积]
看来,在这个例子中,顶点权重与假设为每个顶点的表面面积成正比 "belong" 被计算出来。假定任何入射三角形面积的三分之一都对这个特定的顶点有贡献。 (其他三分之二被认为属于入射到相应三角形的其他两个顶点。)因此您的因子(大约)1/3。