任意凸多边形的重心求解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模型的建立与求解

一、计算凸多边形的重心

对于任意凸多边形,我们以其重心为蛛网的中枢区中心,也即蜘蛛的等待猎物点,以此点出发,先发出放射丝,再织捕丝。

1.计算任意凸多边形重心的理论基础

1.四边形的重心作法:连接出四边形的一条对角线,这样四边形就变成两个三角形的组合体,分别作出

两个三角形的重心,并连接两个重心成一条线段AB,同样,连接出四边形的另一条对角线,四边形就变成另外两个三角形的组合体,分别作出这两个三角形的重心,并连接两个重心成一条线段CD,则线段AB,CD的交点就是四边形的重心。

2.五边形的重心作法:连接出五边形的任一条对角线,将五边形分为1个三角形与一个四边形组合体,分

别作出三角形的重心,和四边形的重心,并连成线段AB;连接五边形的另外一条对角形,将五边形分为另1个三角形与四边形的组合体,分别作出三角形与四边形的重心,并连接成线段CD;则AB、CD的交点就是五边形的重心。

3、用数学归纳法,对于六边形、七边形,N边形,都可以用上述方法,先连接出一条对角线,将N边形化为一个三角形与(N-1)边形,或四边形与(N-2)边形,然后分别作出重心,并连接成线段,然后再连接另外一条对象线,分别作出两个组合体的重心并连接成线段,两条线段的交点就是N边形的重心。

2.重心计算的算法程序实现:

有了以上理论基础,我们通过C++语言编写了一个计算任意凸多边形的程序,算法思想如下,算法程序见附录一。

○1在平面上取一点(一般取原点)得到N个三角形OP[i]P[i+1](其中点的顺序为逆时针)

○2分别求出这N个三角形的重心Ci和面积Ai(注意此处面积是有向面积, 就是用叉乘求面积时保留其正负号)

○3求出A = A1+A2+...+AN(同样保留正负号的代数相加)

○4重心C = sigma(Ai+Ci)/A;

附录一:任意凸多边形重心C++算法

#include

#include

#include

using namespace std;

struct point

{

double x;

double y;

};

point gravity(point *p, int n)

{

double area = 0;

point center;

center.x = 0;

center.y = 0;

for (int i = 0; i < n-1; i++)

{

area += (p[i].x*p[i+1].y - p[i+1].x*p[i].y)/2;

center.x += (p[i].x*p[i+1].y - p[i+1].x*p[i].y) * (p[i].x + p[i+1].x);

center.y += (p[i].x*p[i+1].y - p[i+1].x*p[i].y) * (p[i].y + p[i+1].y);

}

area += (p[n-1].x*p[0].y - p[0].x*p[n-1].y)/2;

center.x += (p[n-1].x*p[0].y - p[0].x*p[n-1].y) * (p[n-1].x + p[0].x);

center.y += (p[n-1].x*p[0].y - p[0].x*p[n-1].y) * (p[n-1].y + p[0].y); center.x /= 6*area;

center.y /= 6*area;

return center;

}

相关文档
最新文档