1 背景
有时,我们需要对一个多边形区域进行面积分,而任意一个多边形区域都可以分解成有限个三角形区域,对多边形区域积分就变成对所有三角形区域积分之和。因此本文重点书写三角形区域积分。
这里假设需要在面积为\(s\)的三角形区域对在此区域连续的函数\(f\)进行积分,这里记积分为
(1-1)
$$
u=\iint_S f(x,y)dxdy=\iint_S f(\mathbf{p})dxdy
$$
公式中\(S\)为三角形区域,\(\mathbf{p}\)表示输入参数的坐标点。
为了能获取对任意三角形区域进行积分的表达式,一种可行方法是将当前坐标系转换到另一个坐标系进行计算。
不失一般性,设三角形三个顶点分别为\(\mathbf{p}_0\)、\(\mathbf{p}_1\)、\(\mathbf{p}_2\),它们的坐标分别为\((x_0,y_0)\)、\((x_1,y_1)\)、\((x_2,y_2)\),且\(\mathbf{p}_0\)与\(\mathbf{p}_1\)所在边为三角形的最长边,且三个坐标点按逆时针排列。则现在将三角形坐标系转换到以\(\mathbf{p}_0\)为原点,\(\mathbf{p}_0\)指向\(\mathbf{p}_1\)方向为x方向正向的方向的坐标系,这时根据二维平面的旋转表示与性质可以得到如下变换矩阵
(1-2)
$$
\begin{cases}
\mathbf{t} = \begin{bmatrix}
x_0
\\
y_0
\end{bmatrix}
\\
\\
R = \begin{bmatrix}
\cos \theta &- \sin\theta
\\
\sin\theta & \cos \theta
\end{bmatrix}
\\
\\
\rho =\arctan (y_1-y_0,x_1-x_0)
\\
\\
\theta =\begin{cases}
2\pi – \rho, &
\rho \geq0
\\
|\rho|, &\rho < 0
\end{cases}
\end{cases}
$$
这时为\(\mathbf{p}_0\)、\(\mathbf{p}_1\)、\(\mathbf{p}_2\)在新坐标系下的位置变为
(1-3)
$$
\begin{cases}
\mathbf{p}_0'=\begin{bmatrix}
x_0'
\\
y_0'
\end{bmatrix}=R(\mathbf{p}_0-\mathbf{t})=\mathbf{0}
\\
\\
\mathbf{p}_1'=\begin{bmatrix}
x_1'
\\
y_1'
\end{bmatrix}=R(\mathbf{p}_1-\mathbf{t})
\\
\\
\mathbf{p}_2'=\begin{bmatrix}
x_2'
\\
y_2'
\end{bmatrix}=R(\mathbf{p}_2-\mathbf{t})
\end{cases}
$$
注意:
(1) 因为\(\mathbf{p}_1\)在新坐标系的x轴上,则。 \(y_1'=0\)。
(2) 因为三个顶点按逆时针排列,转换后的\(y_2'>0\),如果转换后的\(y_2'<0\),则三个点是按顺时针排列,这种情况不满足要求,这时应将\(\mathbf{p}_0\)、\(\mathbf{p}_1\)对调再进行计算。在判断点是否逆时针排列时,可利用三角形面积计算公式,即如下表达式\(g\)为正时表示三个坐标点按逆时针排列,否则按顺时针排列
(1-4)
$$
g=(x_0y_1-y_0x_1) + (x_1y_2-y_1x_2) + (x_2y_0-y_2x_0)
$$
然后将新坐标代入公式(1)有
(1-5)
$$
\begin{aligned}
u&=\iint_S f(R^T
\begin{bmatrix}
x'
\\
y'
\end{bmatrix}+\mathbf{t})
\begin{vmatrix}
\dfrac{\partial x}{\partial x'} & \dfrac{\partial x}{\partial y'}
\\
\dfrac{\partial y}{\partial x'} & \dfrac{\partial y}{\partial y'}
\end{vmatrix}
dx'dy'
\\
&=\iint_S f(R^T
\begin{bmatrix}
x'
\\
y'
\end{bmatrix}+\mathbf{t})
\begin{vmatrix}
R^T
\end{vmatrix}
dx'dy'
\\
&=\iint_S f(R^T
\begin{bmatrix}
x'
\\
y'
\end{bmatrix}+\mathbf{t})
dx'dy'
\\
&=
\int_{0}^{x_2'}dx'\int_0^{(y_2'/x_2')x'} f(R^T
\begin{bmatrix}
x'
\\
y'
\end{bmatrix}+\mathbf{t})dy'+\int_{x_2'}^{x_1'}dx'\int_0^{(x-x_1')y_2'/(x_2'-x_1')} f(R^T
\begin{bmatrix}
x'
\\
y'
\end{bmatrix}+\mathbf{t})dy'
\end{aligned}
$$
因此对于任意函数,可直接使用(1-5)进行三角形区域积分。
2 应用特例
2.1 函数为线性函数
当前分布函数满足如下线性分布
(2-1)
$$
f(\mathbf{p}) = \mathbf{p}^T\mathbf{a}+b
$$
将(2-1)代入(1-4)有
(2-2)
$$
\begin{aligned}
u &= \iint_S (\mathbf{p}^T\mathbf{a}+b)dx'dy'
\\
&=sb+\iint_S (\mathbf{a}^T\mathbf{p})dx'dy'
\\
&=sb+\int_{0}^{x_2'}dx'\int_0^{(y_2'/x_2')x'} \mathbf{a}^T(R^T
\begin{bmatrix}
x'
\\
y'
\end{bmatrix}+\mathbf{t})dy'+\int_{x_2'}^{x_1'}dx'\int_0^{(x-x_1')y_2'/(x_2'-x_1')} \mathbf{a}^T(R^T
\begin{bmatrix}
x'
\\
y'
\end{bmatrix}+\mathbf{t})dy'
\\
&=s(b+\mathbf{a}^T\mathbf{t})+\int_{0}^{x_2'}dx'\int_0^{(y_2'/x_2')x'}
(\begin{bmatrix}
x' & y'
\end{bmatrix}R\mathbf{a})dy'+\int_{x_2'}^{x_1'}dx'\int_0^{(x-x_1')y_2'/(x_2'-x_1')} (
\begin{bmatrix}
x' & y'
\end{bmatrix}R\mathbf{a})dy'
\\
&=s(b+\mathbf{a}^T\mathbf{t})+\dfrac{1}{3}\begin{bmatrix}
y_2'x_2'^2 &x_2'y_2'^2/2
\end{bmatrix}R\mathbf{a}+\dfrac{1}{6}\begin{bmatrix}
y_2'x_1'^2-2y_2'x_2'^2+y_2'x_1'x_2'
&
y_2'^2(x_1'-x_2')
\end{bmatrix}R\mathbf{a}
\\
&=s(b+\mathbf{a}^T\mathbf{t})+\dfrac{x_1'y_2'}{6}\begin{bmatrix}
x_1' + x_2' & y_2'
\end{bmatrix}R\mathbf{a}
\\
&=s(b+\mathbf{a}^T\mathbf{t})+\mathbf{c}^TR\mathbf{a}
\end{aligned}
$$
上面公式中
(2-3)
$$
\begin{aligned}
\mathbf{c}&=\dfrac{x_1'y_2'}{6}\begin{bmatrix}
x_1'+x_2'
\\
y_2'
\end{bmatrix}
\\
&=\dfrac{x_1'y_2'}{6}(\mathbf{p}_1'+\mathbf{p}_2')
\\
&=\dfrac{x_1'y_2'}{6} R(\mathbf{p}_1+\mathbf{p}_2-2\mathbf{t})
\end{aligned}
$$
将(2-3)代码(2-2)有
(2-4)
$$
\begin{aligned}
u&=s(b+\mathbf{a}^T\mathbf{t})+\dfrac{x_1'y_2'}{6}(\mathbf{p}_1+\mathbf{p}_2-2\mathbf{t})^TR^TR\mathbf{a}
\\
&=s(b+\mathbf{a}^T\mathbf{p}_0)+\dfrac{x_1'y_2'}{6}(\mathbf{p}_1+\mathbf{p}_2-2\mathbf{p}_0)^T\mathbf{a}
\end{aligned}
$$
对于(2-1)的线性函数,最终的积分结果为(2-4)。
PS:上面公式中为表示方便,向量(或矩阵)中只有一个元素时,这时的向量(或矩阵)与标量数值不加以区分。