利用二重积分公式也许可以简化函数表达式,但既然是要求编程实现的话,就该采取另一种思维!另外既然是分段函数,就该有更详细的区间划分才对呀?
所谓找重心就是求一个点P(x,y),通过这一点的任何一条线将这个图形划分成的两块面积相等;先要求出这个图形总面积的近似值,电脑不懂如何聪明地变换化简函数表达式,只会用若干个小矩形拼接去无限逼近这个图形(微积分的基本涵义就是如此),具体来说就是定义三个浮点数类型的变量X=0.0和H=0.0及S=0.0,前者的值从A递变到B,每变化一次就计算一次F(X)的值,并累加一次小矩形的面积S+=X*F(X)与高度和H+=F(X),总共变化了n次(=|A-B|/步长值)。每次X值变化的步长越小,结果值就越接近真实的值(当然计算量也就越大)。由于是分段函数,编程时建议用函数指针可以达到更完美的封装效果。接下来就可以得出重心的纵坐标y=H/n;(如果编程时这么直接求值的话很容易导致溢出,最好采取分步求值),至于重心横坐标x的值怎么求?好像还需要按刚才的步长递变的方法重新计算出累计面积正好达到S/2时的X值(也许还有更妙的方法)。
可以用近似计算啊,图形面积为
float s=0,x,band;
band=(B-A)/1000;//将图形竖着分为1000分,这个自己决定多少份
for(x=A;x<=B;x+=band)
{s+=F(x);}
s*=band;
然后求出面积为s/2时候的x值
当然这是考虑函数图形没有重叠的情况,有重叠的还要细分
横着的情况也差不多吧