10

三角形と同じ平面上の点を重心点に変換する次の関数があります。

// p0, p1 and p2  and the points that make up this triangle
Vector3d Tri::barycentric(Vector3d p) {
    double triArea = (p1 - p0).cross(p2 - p0).norm() * 0.5;
    double u = ((p1 - p).cross(p2 - p).norm() * 0.5) / triArea;
    double v = ((p0 - p).cross(p2 - p).norm() * 0.5) / triArea;
    double w = ((p0 - p).cross(p1 - p).norm() * 0.5) / triArea;
    return Vector3d(u,v,w);
}

この操作の逆をどのように書くことができますか? 重心座標を取り、デカルト座標を返す関数を書きたいと思います。

4

1 に答える 1

16

ポイントのデカルト座標は、重心座標を係数とする線形結合として計算できます。

Vector3d Tri::cartesian(const Vector3d& barycentric) const
{
      return barycentric.x * p0 + barycentric.y * p1 + barycentric.z * p2;
}
于 2012-06-29T13:10:00.560 に答える