欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

图形数学基础(二十):几何元素 - 重心坐标

最编程 2024-05-26 15:43:17
...

本文已参与[新人创作礼]活动,一起开启掘金创作之路

转载请注明出处.

图形学的数学基础(二十):几何图元-重心坐标

1.jpg

定义重心坐标(Barycentric  CoordinatesBarycentric\;Coordinates)

对于空间内的三角形v1v2v3\triangle{v_1v_2v_3}和任意一点p\textbf{p},必定唯一存在三个数b1,b2,b3b_1,b_2,b_3,满足:

b1+b2+b3=1b_1+b_2+b_3 = 1

p=b1v1+b2v2+b3v3\textbf{p} = b_1\textbf{v}_1 + b_2\textbf{v}_2+ b_3\textbf{v}_3

b1,b2,b3b_1,b_2,b_3就称为p\textbf{p}点在此三角形v1v2v3\triangle{v_1v_2v_3}上的重心坐标.

重心坐标表示了三角形每个顶点对该点的权重(贡献),重心坐标可以用来三角形光栅化顶点的属性插值,比如说uv 颜色 法线的线性插值。

重心坐标也是一种坐标系统,类似于普通笛卡尔坐标系,但有一个区别就是,重心坐标的三个分量之和为1:

b1+b2+b3=1b_1 + b_2 + b_3 = 1

这种归一化的约束消除了一个*度,因此即使有三个坐标,它仍然是一个二维空间。

重心坐标不仅适用于三角形内的点,对于边上的点甚至三角形外的点都是适用的,三角形内的重心坐标都是被限制到[0,1]范围内,三角形外的任何点都至少有一个负坐标。

还有一种解释重心坐标的角度,丢弃b3b_3,将(b1,b2)(b_1,b_2)解释为常规的二维坐标,原点位于v3\textbf{v}_3,x轴是v1v3\textbf{v}_1-\textbf{v}_3,y轴是v2v3\textbf{v}_2-\textbf{v}_3

2.jpg

(b1,b2,b3)=>b1v1+b2v2+b3v3=>b1v1+b2v2+(1b1b2)v3=>b1v1+b2v2+v3b1v3b2v3=>v3+b1(v1v3)+b2(v2v3)(b_1,b_2,b_3)\\=> b_1\textbf{v}_1 + b_2\textbf{v}_2 + b_3\textbf{v}_3\\ => b_1\textbf{v}_1 + b_2\textbf{v}_2 + (1-b_1-b_2)\textbf{v}_3\\ => b_1\textbf{v}_1 + b_2\textbf{v}_2 + \textbf{v}_3 - b_1\textbf{v}_3-b_2\textbf{v}_3\\ => \textbf{v}_3 + b_1(\textbf{v}_1 -\textbf{v}_3) + b_2(\textbf{v}_2 - \textbf{v}_3)

计算重心坐标

3.png

已知p的坐标和v1,v2,v3v_1,v_2,v_3的顶点坐标,求p的重心坐标(b1,b2,b3)(b_1,b_2,b_3),只需要求解线性方程组即可:

{b1x1+b2x2+b3x3=pxb1y1+b2y2+b3y3=pxb1+b2+b3=1\begin{cases} b_1x_1 +b_2x_2 + b_3x_3 = p_x\\ b_1y_1 +b_2y_2 + b_3y_3 = p_x\\ b_1+b_2+b_3 = 1 \end{cases}