计算openmesh中三角形的面积

时间:2017-03-17 11:22:13

标签: c++ openmesh

以下是“多边形网格处理”示例的片段:

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会在最后成倍增加?

1 个答案:

答案 0 :(得分:2)

您可能知道,((Q-P)%(R-P)).norm() * 0.5f部分只是QPR所跨越的三角形区域。

在这个例子中,似乎与假定为"的表面面积成比例的顶点权重属于"计算每个顶点。假设任何入射三角形的面积的三分之一对该特定顶点有贡献。 (另外两个三分之二被认为是属于相应三角形的另外两个顶点。)因此你的因子是(大约)1/3。