计算几何-计算多边形面积(模板)
2017-08-14 21:20
176 查看
提起平面多边形,最容易想到的就是三角形了。对于简单的三角形面积问题大家一定不陌生!其中就编程而言,精确度最高的当属通过叉积(也称内积)来求解。那么是不是平面多边形也可以通过将多边形分割成一个个的三角形进而求解呢?
回答是肯定的,以梯形ABCD为例,S梯形ABCD=S三角形ABC+S三角形ACD 。
同样对于多边形来说我们也可以通过同样的分割三角形法来实现多边形面积的求解。但是,我们需要做一下排序的预处理。算法执行如下:
将多边形的所有顶点按逆时针排序(避免叉积求三角形面积时符号的正负上出问题)。假定排序后的顶点序列为V0,V1,V2,V3,...,Vi,...Vn,那么多边形的面积就是Sigma(S三角形V0ViV(i+1)),其中1<=i<n-1。
确定一个顶点,然后遍历其他所有的边(每条边有两个点,这样就构成了三个点一个三角形,从而计算出每一块三角形的面积)
[c-sharp] view
plain copy
//顶点存储
typedef struct Node{
double x,y;
}Point;
Point p[101];
[c-sharp] view
plain copy
//结合叉积求多边形面积
double cross(Point a,Point b,Point o){
return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);
}
double area(int n){
double res=0.0;
for(int i=0;i<n-1;i++)
res+=cross(p[i],p[i+1],p[0]);
return res/2.0;
}
回答是肯定的,以梯形ABCD为例,S梯形ABCD=S三角形ABC+S三角形ACD 。
同样对于多边形来说我们也可以通过同样的分割三角形法来实现多边形面积的求解。但是,我们需要做一下排序的预处理。算法执行如下:
将多边形的所有顶点按逆时针排序(避免叉积求三角形面积时符号的正负上出问题)。假定排序后的顶点序列为V0,V1,V2,V3,...,Vi,...Vn,那么多边形的面积就是Sigma(S三角形V0ViV(i+1)),其中1<=i<n-1。
确定一个顶点,然后遍历其他所有的边(每条边有两个点,这样就构成了三个点一个三角形,从而计算出每一块三角形的面积)
[c-sharp] view
plain copy
//顶点存储
typedef struct Node{
double x,y;
}Point;
Point p[101];
[c-sharp] view
plain copy
//结合叉积求多边形面积
double cross(Point a,Point b,Point o){
return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);
}
double area(int n){
double res=0.0;
for(int i=0;i<n-1;i++)
res+=cross(p[i],p[i+1],p[0]);
return res/2.0;
}
相关文章推荐
- 摘:向量叉乘_计算多边形面积_算法模板
- 计算几何--(半平面判断多边形是否存在内核以及内核面积计算)
- 【Codeforces Round 339 (Div 2)C】【计算几何 点到直线的距离模板】Peter and Snow Blower 多边形整体绕一圆心旋转的运行面积
- 计蒜客 羊圈(凸包+多边形面积计算模板)
- hdu2306(模板可用于计算仍以多边形面积)
- HDU 2036(多边形计算面积模板)
- 计算几何 多边形面积 和 重心 的求法
- 计算几何——HDUOJ 1115 - Lifting the Stone(计算多边形重心 / 多边形面积)
- 计算几何工具算法-求任意多边形的面积
- HDU 5130 Signal Interference --计算几何,多边形与圆的交面积
- POJ-3348 Cows 计算几何 求凸包 求多边形面积
- hdu 2036 计算多边形面积
- 计算几何 多边形面积交
- hdu-2036计算任意多边形面积
- 点到直线的距离 点是否在多边形内 计算多边形面积 四边形面积 三角形面积 两边之和减去第三边 C程序
- 多边形面积计算公式
- 公布计算任意多边形相交部分的面积的方法
- js根据经纬度计算多边形面积
- 任意多边形面积计算
- 如何计算多边形面积