gpt4 book ai didi

c++ - 四面体的重心坐标

转载 作者:行者123 更新时间:2023-11-30 03:39:46 29 4
gpt4 key购买 nike

我想寻求有关四面体重心坐标的帮助:

按照我在这里找到的方法: http://www.cdsimpson.net/2014/10/barycentric-coordinates.html我实现了一个 C++ 函数来查找四面体中某个点的重心坐标:

float ScTP(const Vec &a, const Vec &b, const Vec &c)
{
// computes scalar triple product
return Dot(a, Cross(b, c));
}

Vec4f bary_tet(Vec3f a, Vec3f b, Vec3f c, Vec3f d, Vec3f p)
{
float va, vb, vc, vd, v;
Vec3f vap = p - a;
Vec3f vbp = p - b;
Vec3f vcp = p - c;
Vec3f vdp = p - d;

Vec3f vab = b - a;
Vec3f vac = c - a;
Vec3f vad = d - a;

Vec3f vbc = c - b;
Vec3f vbd = d - b;
// ScTP computes the scalar triple product
va = ScTP(vbp, vbd, vbc) * 1 / 6;
vb = ScTP(vap, vac, vad) * 1 / 6;
vc = ScTP(vap, vad, vab) * 1 / 6;
vd = ScTP(vap, vab, vac) * 1 / 6;
v = 1 / ScTP(vab, vac, vad) * 1 / 6;
return Vec4f(va*v, vb*v, vc*v, vd*v);
}

但是,我的代码似乎计算出了稍微错误的重心坐标 -将我的结果与此处的引用实现进行比较: http://dennis2society.de/painless-tetrahedral-barycentric-mapping我的四个重心值均小于由引用实现。

有没有人发现我的实现有任何错误?非常感谢您的帮助!

最佳答案

盲猜:

Vec4f bary_tet(const Vec3f & a, const Vec3f & b, const Vec3f & c, const Vec3f & d, const Vec3f & p)
{
Vec3f vap = p - a;
Vec3f vbp = p - b;

Vec3f vab = b - a;
Vec3f vac = c - a;
Vec3f vad = d - a;

Vec3f vbc = c - b;
Vec3f vbd = d - b;
// ScTP computes the scalar triple product
float va6 = ScTP(vbp, vbd, vbc);
float vb6 = ScTP(vap, vac, vad);
float vc6 = ScTP(vap, vad, vab);
float vd6 = ScTP(vap, vab, vac);
float v6 = 1 / ScTP(vab, vac, vad);
return Vec4f(va6*v6, vb6*v6, vc6*v6, vd6*v6);
}

关于c++ - 四面体的重心坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545520/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com