转:求多边形的面积 算法几何
2013-01-09 18:09
85 查看
我还是简单解释一下,如果是没有读过高等数学的朋友,也让你大致明白。
定积分的本质是求和,计算f(x)在积分区间[a,b]上的一个和S,首先把积分区间分成n份,这样的分法记为λ,记Δ(λ)=max{Δx|[xi-1,xi]},也就是所有这些分成的小段中长度最大的一段的长,如果当Δ→0的时候,和式S=∑f(θ)Δx (θ∈[xi-1,xi])的极限如果存在的话,就称其为f(x)在[a,b]上的定积分,记为
b
∫f(x)dx
a
其意义从几何上解释,就是f(x)的曲线与x轴、直线x=a,x=b围成的图形的面积。
现在要求的多边形是由线段组成的,只要把所有的线段都求定积分,最后把和加起来,就是多边形的面积。这个推论的证明从略。值得注意的是,用定积分求的面积有正负之分,即:
∫f(x)dx=-∫f(x)dx
从a积到b,与从b积到a只相差一个负号。
线段定积分的计算公式的推导
给出两个点,如何求这两点连成的线段的定积分值呢?
直线的方程可以用y=kx+b表示,所以围成的面积
S=
x2
∫(kx+b)dx
x1
=k/2(x2^2-x1^2)+b(x2-x1)
而斜率k=(y2-y1)/(x2-x1)
截距b=y1-kx1=y1-x1(y2-y1)/(x2-x1),代入前式得
S=(y2-y1)(x2+x1)/2+y1(x2-x1)-x1(y2-y1)
=(x2-x1)(y1+y2)/2
这让我想到一个初等公式,梯形面积公式,y1,y2看成上下底,(x2-x1)看成是高,上底加下底乘高除二,对直线定积分得到的正是这个梯形的面积。这样走了一个大弯又回到初中了。
C++程序代码
#include<iostream.h>
float linesqr(x1,y1,x2,y2)
float x1,y1,x2,y2;
{return (x2-x1)*(y1+y2)/2.0;}
void main()
{
float fx,fy,x1,y1,x2,y2,s=0.0;
int n,i;
cout<<"多边形的顶点数";
do{cin>>n;}
while(n<3);
cout<<"第1个点坐标"<<endl;
cin>>x1>>y1;fx=x1;fy=y1;
cout<<"第2个点坐标"<<endl;
cin>>x2>>y2;
s=linesqr(x1,y1,x2,y2);
for(i=3;i<=n;++i)
{
x1=x2;y1=y2;
cout<<"第"<<i<<"个点坐标"<<endl;
cin>>x2>>y2;
s+=linesqr(x1,y1,x2,y2);
}
s+=linesqr(x2,y2,fx,fy);//首尾相连
cout<<"多边形的面积为"<<s<<endl;
}
定积分的本质是求和,计算f(x)在积分区间[a,b]上的一个和S,首先把积分区间分成n份,这样的分法记为λ,记Δ(λ)=max{Δx|[xi-1,xi]},也就是所有这些分成的小段中长度最大的一段的长,如果当Δ→0的时候,和式S=∑f(θ)Δx (θ∈[xi-1,xi])的极限如果存在的话,就称其为f(x)在[a,b]上的定积分,记为
b
∫f(x)dx
a
其意义从几何上解释,就是f(x)的曲线与x轴、直线x=a,x=b围成的图形的面积。
现在要求的多边形是由线段组成的,只要把所有的线段都求定积分,最后把和加起来,就是多边形的面积。这个推论的证明从略。值得注意的是,用定积分求的面积有正负之分,即:
∫f(x)dx=-∫f(x)dx
从a积到b,与从b积到a只相差一个负号。
线段定积分的计算公式的推导
给出两个点,如何求这两点连成的线段的定积分值呢?
直线的方程可以用y=kx+b表示,所以围成的面积
S=
x2
∫(kx+b)dx
x1
=k/2(x2^2-x1^2)+b(x2-x1)
而斜率k=(y2-y1)/(x2-x1)
截距b=y1-kx1=y1-x1(y2-y1)/(x2-x1),代入前式得
S=(y2-y1)(x2+x1)/2+y1(x2-x1)-x1(y2-y1)
=(x2-x1)(y1+y2)/2
这让我想到一个初等公式,梯形面积公式,y1,y2看成上下底,(x2-x1)看成是高,上底加下底乘高除二,对直线定积分得到的正是这个梯形的面积。这样走了一个大弯又回到初中了。
C++程序代码
#include<iostream.h>
float linesqr(x1,y1,x2,y2)
float x1,y1,x2,y2;
{return (x2-x1)*(y1+y2)/2.0;}
void main()
{
float fx,fy,x1,y1,x2,y2,s=0.0;
int n,i;
cout<<"多边形的顶点数";
do{cin>>n;}
while(n<3);
cout<<"第1个点坐标"<<endl;
cin>>x1>>y1;fx=x1;fy=y1;
cout<<"第2个点坐标"<<endl;
cin>>x2>>y2;
s=linesqr(x1,y1,x2,y2);
for(i=3;i<=n;++i)
{
x1=x2;y1=y2;
cout<<"第"<<i<<"个点坐标"<<endl;
cin>>x2>>y2;
s+=linesqr(x1,y1,x2,y2);
}
s+=linesqr(x2,y2,fx,fy);//首尾相连
cout<<"多边形的面积为"<<s<<endl;
}
相关文章推荐
- 计算几何工具算法-求任意多边形的面积
- 计算几何 ( 求多边形面积 )——改革春风吹满地 ( HDU 2036 )
- 计算几何_多边形的有向面积和确保多边形的点是逆时针排列
- 计算几何--简单多边形与圆面积交
- 【几何-图形学算法学习笔记二】线围成的面多边形自动构建
- GIS算法之多边形面积求解
- [知识点]计算几何I——基础知识与多边形面积
- POJ 1654 (平面几何 多边形面积 水~)
- 计算几何--多边形面积的计算
- POJ 1654 (平面几何 多边形面积 水~)
- POJ 1408 Fishnet(计算几何,多边形相关算法)
- poj 3348 Cows 凸包 求多边形面积 计算几何 难度:0 Source:CCC207
- POJ 1408-Fishnet(计算几何-根据交点求多边形面积)
- Python计算任意多边形面积算法
- POJ1265 Area (Pick定理,多边形面积,计算几何)
- hdoj.5130 Signal Interference【计算几何+圆与多边形相交面积】 2015/08/17
- 叉乘求任意多边形(凹凸皆可)面积 (属于计算几何类型)
- 算法学习笔记之计算几何--三角形,多边形与圆
- [从头学数学] 第278节 [计算几何] 多边形周长和面积
- 几何算法:点集合构造简单多边形