从重心到笛卡儿

时间:2012-06-29 13:08:19

标签: c++ math 3d coordinate-systems

我有以下功能将同一平面上的一个点转换为三角形到重心点。

// 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);
}

如何编写此操作的反转?我想写一个带有重心坐标并返回笛卡尔点的函数。

1 个答案:

答案 0 :(得分:9)

点的笛卡尔坐标可以计算为线性组合,重心坐标为系数:

Vector3d Tri::cartesian(const Vector3d& barycentric) const
{
      return barycentric.x * p0 + barycentric.y * p1 + barycentric.z * p2;
}