c++ - 从重心到笛卡尔

标签 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);
}

如何写出这个操作的逆运算?我想编写一个采用重心坐标并返回笛卡尔点的函数。

最佳答案

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

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

关于c++ - 从重心到笛卡尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262391/

相关文章:

c++ - 有什么优雅的方法可以在 C++ 中格式化字符串?

python - 舍入系统 RAM 和 HDD 字节,向上到最接近的千兆字节。 Python

c# - WPF 3D算法题: what model does it use?

javascript - Three.js 在对象上添加按钮以显示有关该位置的信息

c++ - 变量的值无法存储

c++ - std::min_element 从类对象返回意外结果

c++ - 基于 wchar_t* 的 vector 的奇怪行为

javascript float 动态精度?

language-agnostic - 如何以一般方式将平均值的计算减少到子集?

3d - 在窗口中绘制的最简单的 3D 程序是什么?