实心多边形重心的计算公式及推导

先上结果:

假设P^0,P^1,...,P^n是某个多边形的顶点且逆时针排列,则

c=\frac{1}{3}\frac{1}{\sum\limits_{i}P^i_y(P^{i-1}_x-P^{i+1}_x)}\left( \sum\limits_{i}P^i_y(P^{i-1}_x-P^{i+1}_x)\left(P^{i-1}_x+P^{i}_x+P^{i+1}_x\right ) , -\sum\limits_{i}P^i_x(P^{i-1}_y-P^{i+1}_y)\left(P^{i-1}_y+P^{i}_y+P^{i+1}_y\right ) \right )

 

推导过程:

 对于平面上一般区域,其重心计算公式为

                                                              \mathbf{c}=\frac{\iint_D\mathbf{x}dv}{\iint_Ddv}=(\frac{\iint_D{x}dv}{\iint_Ddv},\frac{\iint_Dydv}{\iint_Ddv})

利用散度定理:

\iint_D{x}dv=\frac{1}{2}\iint_D\nabla\cdot(x^2,0)dv=\frac{1}{2}\int_{\partial D}(x^2,0)\cdot\mathbf{n}ds=\frac{1}{2}\sum_i\mathbf{n}_i\cdot\int_{P^iP^{i+1}}(x^2,0)ds

先计算:

\int_{P^iP^{i+1}}x^2ds=\int_0^1\left(P^i_x+t(P^{i+1}_x-P^i_x) \right )^2\|P^iP^{i+1}\|dt=\frac{1}{3}\|P^iP^{i+1}\|\left((P^{i+1}_x)^2+(P^{i+1}_xP_x^{i})+ (P^{i}_x)^2\right )

注意\|P^iP^{i+1}\|\mathbf{n}_i恰好是P^iP^{i+1}顺时针旋转90度得到的向量,于是他的横坐标为P^{i+1}_y-P^i_y,于是有

\mathbf{n}_i\cdot\int_{P^iP^{i+1}}(x^2,0)dv=\frac{1}{3}(P^{i+1}_y-P^i_y)((P^i_x)^2+(P_x^{i+1})^2+(P_x^iP_x^{i+1}))

对i进行求和并注意到\sum P^{i+1}_y(P_x^{i+1})^2=\sum P^{i}_y(P_x^{i})^2,于是有

\sum \mathbf{n}_i\cdot\int_{P^iP^{i+1}}(x^2,0)dv=\frac{1}{3}\sum P^{i+1}_y\left((P_x^i)^2+P_x^{i+1}P_x^i\right)-P_y^i\left((P_x^{i+1})^2+P_x^{i+1}P_x^{i} \right )

在和式中第一项指标减一,得到和式的值为

\frac{1}{3}\sum P_y^{i}\left(P^{i-1}_x-P_x^{i+1} \right )\left(P_x^{i-1}+P_x^i+P_x^{i+1} \right )

于是是\iint_D\mathbf{x}dv的横坐标为

\frac{1}{6}\sum P_y^{i}\left(P^{i-1}_x-P_x^{i+1} \right )\left(P_x^{i-1}+P_x^i+P_x^{i+1} \right )

同理可得到纵坐标为

-\frac{1}{6}\sum P_x^{i}\left(P^{i-1}_y-P_y^{i+1} \right )\left(P_y^{i-1}+P_y^i+P_y^{i+1} \right )

剩下的就是计算面积了,这个不用多说就是\frac{1}{2}\sum P^i_y(P_x^{i-1}-P_x^{i+1})

这样就得到了最后的结果。

 

推广:

可以看到上述公式变形后就是三角形\Delta P^{i-1}P^iP^{i+1}重心的加权平均,但是权重并不是他们的面积,这个面积具体表示什么暂时还没有想好,有兴趣的读者可以自己想一下,不知道可不可以推广到三维空间。

 

笔者水平有限,推导过程及公式如有纰漏,欢迎大家指出。

你可能感兴趣的:(计算几何,计算机图形学,几何学)