在开放网格中计算三角形的面积

calculate the area of a triangle in openmesh

本文关键字:三角形 计算 网格      更新时间:2023-10-16

这是"多边形网格过程"示例中的片段:

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部分只是由 QPR 跨越的三角形的面积。

在此示例中,似乎计算了一个与假定"属于"每个顶点的表面面积成比例的顶点权重。假设任何入射三角形的三分之一面积都有助于此特定顶点。(另外三分之二被认为属于入射到相应三角形的其他两个顶点。因此,您的系数(大约(为1/3。