加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

三角形内一点对应的重心坐标

发布时间:2020-12-16 23:13:43 所属栏目:大数据 来源:网络整理
导读://计算位于三角形内部任意一点相对于三个顶点的重心坐标 bool GetBaryCoord(CVector3d *tri,const CVector3d cp,CVector3d bCoord) { CVector3d v0 = tri[0] - cp; CVector3d v1 = tri[1] - cp; CVector3d v2 = tri[2] - cp; CVector3d va = tri[1] - tri[0]

//计算位于三角形内部任意一点相对于三个顶点的重心坐标
bool GetBaryCoord(CVector3d *tri,const CVector3d& cp,CVector3d &bCoord)
{
CVector3d v0 = tri[0] - cp;
CVector3d v1 = tri[1] - cp;
CVector3d v2 = tri[2] - cp;

CVector3d va = tri[1] - tri[0];
CVector3d vb = tri[2] - tri[0];

double d = va.Dot(vb);

if (d > -EPSILON)
{
double r = v1.Dot(v2) / d;
double g = v0.Dot(v2) / d;
double b = v0.Dot(v1) / d;
bCoord.Set(r,g,b);
return true;
}
else
{
return false;
}


}

//还没有好好测试~~

可能会出点小问题

果然是写错了

//计算位于三角形内部任意一点相对于三个顶点的重心坐标
bool GetBaryCoord(CVector3d *tri,CVector3d &bCoord)
{
CVector3d v0 = tri[0] - cp;
CVector3d v1 = tri[1] - cp;
CVector3d v2 = tri[2] - cp;

CVector3d va = tri[1] - tri[0];
CVector3d vb = tri[2] - tri[0];

CVector3d vd = va.Cross(vb);
double lend = vd.Length();

CVector3d vr,vg,vvb;
double r,b;

if (lend > -EPSILON)
{
vr = v1.Cross(v2);
r = vr.Length() / lend;
vg = v0.Cross(v2);
g = vg.Length() / lend;
vvb = v0.Cross(v1);
b = vvb.Length() / lend;
bCoord.Set(r,b);
return true;
}
else
{
return false;
}
}

但是这个会不会是遇到数值上的问题呢?如何去避免?……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读