给定一个直角坐标系中的三角形和该三角形内的一个点,我可以像这样计算该点的重心坐标:

bary中对p1p2p3的顶点法线进行插值?具体来说,我很困惑哪个系数属于哪个顶点。

评论

尝试一些值,当内部点靠近顶点时,接近1的系数属于该顶点。

@ratchetfreak我这样做了,但是我也很好奇如何从数学上找到各个系数。

#1 楼

这就是定义向量的方式。看到您的定义矢量$ V_1 $和$ V_2 $从$ P_2 $点向外指向。三角形的平行四边形,是通过将三角形自身重复而形成的。另一种看待它的方式是,它的两个尖齿是三角形的面积的平方。 >
(d11 * d20 - d01 * d21)


是$ P_2 $-$ T $-$ P_3 $
的平行四边形的平方面积


使用denom进行计算,则您已计算出三角形$ P_2 $-$ T $-$ P_3 $的总面积相对面积。因此公式(d11 * d20 - d01 * d21) / denom是相对于整个三角形大小的三角形大小:



这是对角施加在该点上的权重。这就是与点$ P_1 $相关的重心权重。

下一行只是三角形$ P_2 $-$ T $-$ P_1 $的相对面积或:



与$ P_3 $相对的是$ P_3 $的重心坐标。使用1 - bary[0] - bary[1]与$ P_2 $相反。

注意:您可以为不同的顺序选择不同的第一个向量。

评论


$ \ begingroup $
太好了,我正在寻找这种解释。顺便说一句,有一个小错误,$ V_1 $应该是$ V_0 $,$ V_2 $应该是$ V_1 $,而$ V_3 $应该指向$ T $。希望您有时间修复该错误。再次感谢,希望有很多人从中受益。
$ \ endgroup $
–... Bla ...
17年4月20日在5:04

$ \ begingroup $
Argh,@ Bla ...是的,我会重画图片。无论如何,我感觉代码中的变量可以具有更易理解的名称。 $ V_0 $-$ V_2 $ offcourse是合理的名称,但是用与您的积分相同的命名法来命名它们会更好。
$ \ endgroup $
– joojaa
17年4月20日在5:34

$ \ begingroup $
我刚刚更改了变量名称,希望现在它变得更清晰了。
$ \ endgroup $
–... Bla ...
17年4月20日在6:32

#2 楼

通过将t更改为三角形上的点之一(p1, p2, p3),可以凭​​经验找到哪个系数属于哪个顶点。那么,系数之一将是1,其他系数是0。基于此,您知道哪个系数属于哪个顶点。然后,对法线进行插值是微不足道的: