问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

图形学初识:三角形重心坐标插值算法详解

创作时间:
作者:
@小白创作中心

图形学初识:三角形重心坐标插值算法详解

引用
CSDN
1.
https://blog.csdn.net/u010092716/article/details/139195853

三角形插值算法是计算机图形学中的一个重要概念,特别是在处理三角形网格的属性插值时。本文将详细介绍三角形重心坐标插值算法,通过数学推导和几何解释,帮助读者理解这一算法的核心思想和具体实现方法。

前言

在前面的文章中,我们讨论了直线光栅化和直线插值的内容。本篇文章将重点介绍三角形插值算法,主要利用重心坐标公式。虽然这里暂不涉及三角形光栅化的内容,但这些知识将为后续学习打下坚实的基础。

正文

为什么需要三角形插值?

在计算机图形学中,我们经常需要处理三角形网格。如果我们知道屏幕上三角形三个顶点各自的属性值(如颜色、纹理坐标等),如何得知三角形内部所有像素位置的属性值呢?这就是三角形插值要解决的问题。

什么是三角形插值?

用数学符号来描述:已知三角形的三个顶点 $v_0$、$v_1$、$v_2$,每个顶点的属性值 $f(v_0)$、$f(v_1)$、$f(v_2)$,我们需要计算三角形内任意顶点 $v_{in}$ 的属性值 $f(v_{in})$。

如何进行三角形插值?

虽然可能有其他三角形插值算法,但本文重点介绍重心坐标插值算法。

1. 结论

对于三角形 $\triangle ABC$ 内任意一点 $P$,都存在 $0 < \alpha, \beta, \gamma < 1$ 且 $\alpha + \beta + \gamma = 1$,使得
$$f(P) = \alpha f(A) + \beta f(B) + \gamma f(C)$$

为了简化算法核心内容的阐述,我们暂时忽略三角形边界情况,即不考虑取0和1的情况。

2. 核心理解

通过观察上述结论,可以发现:只要通过三角形三个顶点属性值的加权混合,就可以获得三角形内部任何位置的顶点的属性值。

3. 几何理解-重心坐标公式推导

(1)已知三角形 $\triangle ABC$,其中一点 $P$ 位于三角形内部

(2)借助向量辅助推导,推导出顶点 $P$ 和 $A$、$B$、$C$ 的关系

$$
\begin{aligned}
&\because 向量 \vec{AB} , \vec{AC} 线性无关\
&\therefore 一定 \exists 常数 \beta、\gamma 使得\vec{AP} = \beta\vec{AB} + \gamma\vec{AC}\
&\because\vec{AB} = B-A,\vec{AC} = C-A,\vec{AP} = P-A\
&\therefore P - A = \beta(B-A) + \gamma(C-A)\
&\therefore P = (1 - \beta - \gamma)A + \beta B + \gamma C\
&记\alpha = 1 - \beta - \gamma,从而\exists (\alpha + \beta + \gamma = 1),使得P = \alpha A + \beta B + \gamma C\
\end{aligned}
$$

(3)接下来的关键就是求解三个常数系数:$\alpha$、$\beta$、$\gamma$ 的值

针对上述的 $\triangle ABC$,我们需要作点 $P$ 和点 $B$ 分别到直线 $AC$ 的垂线,交点分别记作 $D$ 和 $E$,然后连接 $PC$

这里分别计算 $\triangle APC$ 和 $\triangle ABC$ 的面积:

$$
S_{APC} = 0.5 * AC * PD\
S_{ABC} = 0.5 * AC * BE
$$

上下两式相除,得到:

$$
\frac{S_{APC}}{S_{ABC}} = \frac{PD}{BE}
$$

记 $PD = h_p$,$BE = h_b$

(4)上述的计算看似没啥用,但是我们可以联想相似三角形的知识,类比转换!

做辅助线:过 $P$ 点做垂直于 $PD$ 的直线 $l_1$,交线段 $AB$ 于点 $F$。然后过点 $F$ 做平行线 $l_2$ 交线段 $AC$ 于点 $G$,如下图所示:

(5)向量加法几何理解突破

因为四边形 $PFGD$ 是矩形,所以 $PD == FG$,结合之前的公式:

$$
\frac{S_{APC}}{S_{ABC}} = \frac{PD}{BE} = \frac{FG}{BE}
$$

又因为 $\triangle AFG$ 和 $\triangle ABE$ 是相似三角形(为什么就不用多说了,初中知识),所以:

$$
\frac{FG}{BE} = \frac{AF}{AB}
$$

这时候,结合开头提到的公式:

$$
\vec{AP} = \beta \vec{AB} + \gamma \vec{AC}
$$

然后再结合向量加法的几何理解,我们可以得到:

$$
AF = \beta * AB
$$

从而得到:

$$
\frac{AF}{AB} = \beta
$$

也就得到了:

$$
\beta = \frac{S_{APC}}{S_{ABC}}
$$

(6)同理。我们也可以得到 $\alpha$ 和 $\gamma$ 的值,如下:

$$
\alpha = \frac{S_{BPC}}{S_{ABC}}\
\beta = \frac{S_{APC}}{S_{ABC}}\
\gamma = \frac{S_{APB}}{S_{ABC}}
$$

(7)至于三角形的公式,咱们不多说,这里贴出来:

$$
S_{BPC} = 0.5 *||\vec{PB} \times \vec{PC}||\
S_{APC} = 0.5 *||\vec{PA} \times \vec{PC}||\
S_{APB} = 0.5 *||\vec{PA} \times \vec{PB}||\
S_{ABC} = 0.5 *||\vec{AB} \times \vec{AC}||
$$

大功告成,希望对大家所有帮助!画图用的是在线软件:geogebra

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号