怎样用算法求出由这几个点构成的多边形的面积?
25 个解决方案
#1
面积不是固定的.
#2
不是的
多边形的点是任意给出的
多边形的点是任意给出的
#3
切割成 nodesize-2 个三角形,在用三角面积公式计算,求和
area=0;
for(i=1;i < nodesize-2; i++)
{
area+= compute_area_size(node[0],node[i],node[i+1]);
}
area=0;
for(i=1;i < nodesize-2; i++)
{
area+= compute_area_size(node[0],node[i],node[i+1]);
}
#4
用 compute_triangel_size,呵呵,就是这个意思
#5
compute_triangel_size这个是C++自带的函数吗?
#6
不知道有没有记错:
点的顺序不确定的话,面积不是固定的.
如果是顺序的(顺时针/逆时针),设N边形第k点的坐标为(x[k],y[k])可以求 x[i]*y[i+1]-x[i+1]*y[i]的和,其中i从1到N,当i=N+1时,i取1.这个和绝对值的一半就是面积吧
点的顺序不确定的话,面积不是固定的.
如果是顺序的(顺时针/逆时针),设N边形第k点的坐标为(x[k],y[k])可以求 x[i]*y[i+1]-x[i+1]*y[i]的和,其中i从1到N,当i=N+1时,i取1.这个和绝对值的一半就是面积吧
#7
应该是切割成三角形吧
#8
首先要生成多边形
从给定的多个点上是有可能生成不同的多边形的
不确定多边形的生成方法,是无法确定多边形的形状的,更无法确定面积
除非你的多边形特殊只有3个点,否则多边形就存在多种可能,有多种不同的面积。
从给定的多个点上是有可能生成不同的多边形的
不确定多边形的生成方法,是无法确定多边形的形状的,更无法确定面积
除非你的多边形特殊只有3个点,否则多边形就存在多种可能,有多种不同的面积。
#9
生成多边形,其实就是指定这些顶点的顺序
在确定了顺序后, 假定是p0, p2, ...., pn-1
那么多边形的面积可以简单的按照如下公式计算
float area = 0;
for (int i=0, j=1; i<n; i++, j++)
{
j = j % n;
area += p[i].x*p[j].y - p[i].y*p[j].x;
}
area = fabs( area * 0.5);
在确定了顺序后, 假定是p0, p2, ...., pn-1
那么多边形的面积可以简单的按照如下公式计算
float area = 0;
for (int i=0, j=1; i<n; i++, j++)
{
j = j % n;
area += p[i].x*p[j].y - p[i].y*p[j].x;
}
area = fabs( area * 0.5);
#10
帮顶!
#11
顶下
#12
是啊 顶点的顺序 应该是确定的吧?
也就是只要能够确定多边形就能够求出它的面积
也就是只要能够确定多边形就能够求出它的面积
#13
怎样用算法求出由这几个点构成的多边形的面积?
===============================================
用扫描多边形的方法,可以得到面积。
===============================================
用扫描多边形的方法,可以得到面积。
#14
对于凸对边形,可以切分成n-2个三角形,每个三角形的面积用如下公式求得:
求三角形面积:给出三角形的三个边长为a,b,c,求三角形的面积。
根据海伦公式来计算三角形的面积: S= ;Area=
1.输入的三角形三边长a,b,c要满足“任意两边长的和大于第三边长”。
2.按海伦公式计算:s=(a+b+c)/2;x=s*(s-a)*(s-b)*(s-c) 这时若x>=0,则求面积:area= ,并输出area的值。
求三角形面积:给出三角形的三个边长为a,b,c,求三角形的面积。
根据海伦公式来计算三角形的面积: S= ;Area=
1.输入的三角形三边长a,b,c要满足“任意两边长的和大于第三边长”。
2.按海伦公式计算:s=(a+b+c)/2;x=s*(s-a)*(s-b)*(s-c) 这时若x>=0,则求面积:area= ,并输出area的值。
#15
对于凹对边形,甚至会出现边与边相交的情况,即使顶点顺序确定,也不好切分成三角形。
#16
我的思路:
1、使用循环链表存储一个多边形的各顶点;
2、找出所有钝角,将凹多边形补成凸多边形;
3、计算该凸多边形的面积(切割成若干三角形),减去补上的那些多边形的面积即可。
1、使用循环链表存储一个多边形的各顶点;
2、找出所有钝角,将凹多边形补成凸多边形;
3、计算该凸多边形的面积(切割成若干三角形),减去补上的那些多边形的面积即可。
#17
//下面我写了个计算三角形面积的片段,不知道有没有用。初编程序,错误肯定很多。^_^
#include <algorithm>
#include <string>
#include <vector>
#include <utility>
#include <iostream>
#include <fstream>
#include <stddef.h>
#include <math.h>
using namespace std;
typedef pair< double, double> coordinate;
double distance( coordinate dot1, coordinate dot2)
{
double midval = (dot1.first - dot2.first)*(dot1.first - dot2.first) + (dot1.second - dot2.second)*(dot1.second - dot2.second);
return sqrt( midval );
}
double triangle_area( double a, double b, double c )
{
double s = ( a + b + c ) / 2.0;
double tmp = s * ( s - a ) * ( s - b ) * ( s - c );
return sqrt( tmp );
}
int main()
{
coordinate dot1, dot2, dot3;
dot1.first = 3.1;
dot1.second = 2.5;
dot2.first = 10.5;
dot2.second = 6.4;
dot3.first = 0;
dot3.second = -3.2;
double a = distance( dot1, dot2 );
double b = distance( dot1, dot3 );
double c = distance( dot2, dot3 );
cout << triangle_area( a, b, c ) << endl;
return 0;
}
#include <algorithm>
#include <string>
#include <vector>
#include <utility>
#include <iostream>
#include <fstream>
#include <stddef.h>
#include <math.h>
using namespace std;
typedef pair< double, double> coordinate;
double distance( coordinate dot1, coordinate dot2)
{
double midval = (dot1.first - dot2.first)*(dot1.first - dot2.first) + (dot1.second - dot2.second)*(dot1.second - dot2.second);
return sqrt( midval );
}
double triangle_area( double a, double b, double c )
{
double s = ( a + b + c ) / 2.0;
double tmp = s * ( s - a ) * ( s - b ) * ( s - c );
return sqrt( tmp );
}
int main()
{
coordinate dot1, dot2, dot3;
dot1.first = 3.1;
dot1.second = 2.5;
dot2.first = 10.5;
dot2.second = 6.4;
dot3.first = 0;
dot3.second = -3.2;
double a = distance( dot1, dot2 );
double b = distance( dot1, dot3 );
double c = distance( dot2, dot3 );
cout << triangle_area( a, b, c ) << endl;
return 0;
}
#18
#include <iostream.h>
#include <math.h>
void main()
{
const int N=5;
float ps[N][2]={ //按顺时针排列的顶点坐标列表
{0,0},
{1,0},
{1,1},
{0.5,0.5},
{0,1}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#include <math.h>
void main()
{
const int N=5;
float ps[N][2]={ //按顺时针排列的顶点坐标列表
{0,0},
{1,0},
{1,1},
{0.5,0.5},
{0,1}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#19
同意分割成三角片的方式
#20
不好意思,有点错误
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
这段代码有时并不能判断0,i,i+1三个点是否为逆时针方向
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
这段代码有时并不能判断0,i,i+1三个点是否为逆时针方向
#21
修正了三角形时针方向的判断
#include <iostream.h>
#include <math.h>
void main()
{
const int N=3;
float ps[N][2]={ //按顺时针的顶点坐标列表
{100,100},{147,154},{215,46}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if ((ps[i][1]-ps[0][1])*(ps[i+1][0]-ps[0][0])-(ps[i+1][1]-ps[0][1])*(ps[i][0]-ps[0][0])<0)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#include <iostream.h>
#include <math.h>
void main()
{
const int N=3;
float ps[N][2]={ //按顺时针的顶点坐标列表
{100,100},{147,154},{215,46}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if ((ps[i][1]-ps[0][1])*(ps[i+1][0]-ps[0][0])-(ps[i+1][1]-ps[0][1])*(ps[i][0]-ps[0][0])<0)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#22
别费劲了
对于三角形来说,已知边长度的时候用海伦公式
在已知顶点坐标的时候看前面的yliang(风之悄语) 的说明
对于多边形更是如此
这里计算量上的差距是天壤之别的
对于三角形来说,已知边长度的时候用海伦公式
在已知顶点坐标的时候看前面的yliang(风之悄语) 的说明
对于多边形更是如此
这里计算量上的差距是天壤之别的
#23
double area = 0;
for ( i = 0; i < N; i++ )
area += p[i].x * p[(i+1)%N].y - p[(i+1)%N].x * p[i].y;
area /= 2;
cout<<area<<endl;
for ( i = 0; i < N; i++ )
area += p[i].x * p[(i+1)%N].y - p[(i+1)%N].x * p[i].y;
area /= 2;
cout<<area<<endl;
#24
这些算法只对不自相交的多边形有效,如果多边形自相交,则必须拆分成不自相交的多边形再计算。
#25
对多边行进行切割,从水平方向或垂直方向上进行切割。切割为三角形,然后求面积。
#1
面积不是固定的.
#2
不是的
多边形的点是任意给出的
多边形的点是任意给出的
#3
切割成 nodesize-2 个三角形,在用三角面积公式计算,求和
area=0;
for(i=1;i < nodesize-2; i++)
{
area+= compute_area_size(node[0],node[i],node[i+1]);
}
area=0;
for(i=1;i < nodesize-2; i++)
{
area+= compute_area_size(node[0],node[i],node[i+1]);
}
#4
用 compute_triangel_size,呵呵,就是这个意思
#5
compute_triangel_size这个是C++自带的函数吗?
#6
不知道有没有记错:
点的顺序不确定的话,面积不是固定的.
如果是顺序的(顺时针/逆时针),设N边形第k点的坐标为(x[k],y[k])可以求 x[i]*y[i+1]-x[i+1]*y[i]的和,其中i从1到N,当i=N+1时,i取1.这个和绝对值的一半就是面积吧
点的顺序不确定的话,面积不是固定的.
如果是顺序的(顺时针/逆时针),设N边形第k点的坐标为(x[k],y[k])可以求 x[i]*y[i+1]-x[i+1]*y[i]的和,其中i从1到N,当i=N+1时,i取1.这个和绝对值的一半就是面积吧
#7
应该是切割成三角形吧
#8
首先要生成多边形
从给定的多个点上是有可能生成不同的多边形的
不确定多边形的生成方法,是无法确定多边形的形状的,更无法确定面积
除非你的多边形特殊只有3个点,否则多边形就存在多种可能,有多种不同的面积。
从给定的多个点上是有可能生成不同的多边形的
不确定多边形的生成方法,是无法确定多边形的形状的,更无法确定面积
除非你的多边形特殊只有3个点,否则多边形就存在多种可能,有多种不同的面积。
#9
生成多边形,其实就是指定这些顶点的顺序
在确定了顺序后, 假定是p0, p2, ...., pn-1
那么多边形的面积可以简单的按照如下公式计算
float area = 0;
for (int i=0, j=1; i<n; i++, j++)
{
j = j % n;
area += p[i].x*p[j].y - p[i].y*p[j].x;
}
area = fabs( area * 0.5);
在确定了顺序后, 假定是p0, p2, ...., pn-1
那么多边形的面积可以简单的按照如下公式计算
float area = 0;
for (int i=0, j=1; i<n; i++, j++)
{
j = j % n;
area += p[i].x*p[j].y - p[i].y*p[j].x;
}
area = fabs( area * 0.5);
#10
帮顶!
#11
顶下
#12
是啊 顶点的顺序 应该是确定的吧?
也就是只要能够确定多边形就能够求出它的面积
也就是只要能够确定多边形就能够求出它的面积
#13
怎样用算法求出由这几个点构成的多边形的面积?
===============================================
用扫描多边形的方法,可以得到面积。
===============================================
用扫描多边形的方法,可以得到面积。
#14
对于凸对边形,可以切分成n-2个三角形,每个三角形的面积用如下公式求得:
求三角形面积:给出三角形的三个边长为a,b,c,求三角形的面积。
根据海伦公式来计算三角形的面积: S= ;Area=
1.输入的三角形三边长a,b,c要满足“任意两边长的和大于第三边长”。
2.按海伦公式计算:s=(a+b+c)/2;x=s*(s-a)*(s-b)*(s-c) 这时若x>=0,则求面积:area= ,并输出area的值。
求三角形面积:给出三角形的三个边长为a,b,c,求三角形的面积。
根据海伦公式来计算三角形的面积: S= ;Area=
1.输入的三角形三边长a,b,c要满足“任意两边长的和大于第三边长”。
2.按海伦公式计算:s=(a+b+c)/2;x=s*(s-a)*(s-b)*(s-c) 这时若x>=0,则求面积:area= ,并输出area的值。
#15
对于凹对边形,甚至会出现边与边相交的情况,即使顶点顺序确定,也不好切分成三角形。
#16
我的思路:
1、使用循环链表存储一个多边形的各顶点;
2、找出所有钝角,将凹多边形补成凸多边形;
3、计算该凸多边形的面积(切割成若干三角形),减去补上的那些多边形的面积即可。
1、使用循环链表存储一个多边形的各顶点;
2、找出所有钝角,将凹多边形补成凸多边形;
3、计算该凸多边形的面积(切割成若干三角形),减去补上的那些多边形的面积即可。
#17
//下面我写了个计算三角形面积的片段,不知道有没有用。初编程序,错误肯定很多。^_^
#include <algorithm>
#include <string>
#include <vector>
#include <utility>
#include <iostream>
#include <fstream>
#include <stddef.h>
#include <math.h>
using namespace std;
typedef pair< double, double> coordinate;
double distance( coordinate dot1, coordinate dot2)
{
double midval = (dot1.first - dot2.first)*(dot1.first - dot2.first) + (dot1.second - dot2.second)*(dot1.second - dot2.second);
return sqrt( midval );
}
double triangle_area( double a, double b, double c )
{
double s = ( a + b + c ) / 2.0;
double tmp = s * ( s - a ) * ( s - b ) * ( s - c );
return sqrt( tmp );
}
int main()
{
coordinate dot1, dot2, dot3;
dot1.first = 3.1;
dot1.second = 2.5;
dot2.first = 10.5;
dot2.second = 6.4;
dot3.first = 0;
dot3.second = -3.2;
double a = distance( dot1, dot2 );
double b = distance( dot1, dot3 );
double c = distance( dot2, dot3 );
cout << triangle_area( a, b, c ) << endl;
return 0;
}
#include <algorithm>
#include <string>
#include <vector>
#include <utility>
#include <iostream>
#include <fstream>
#include <stddef.h>
#include <math.h>
using namespace std;
typedef pair< double, double> coordinate;
double distance( coordinate dot1, coordinate dot2)
{
double midval = (dot1.first - dot2.first)*(dot1.first - dot2.first) + (dot1.second - dot2.second)*(dot1.second - dot2.second);
return sqrt( midval );
}
double triangle_area( double a, double b, double c )
{
double s = ( a + b + c ) / 2.0;
double tmp = s * ( s - a ) * ( s - b ) * ( s - c );
return sqrt( tmp );
}
int main()
{
coordinate dot1, dot2, dot3;
dot1.first = 3.1;
dot1.second = 2.5;
dot2.first = 10.5;
dot2.second = 6.4;
dot3.first = 0;
dot3.second = -3.2;
double a = distance( dot1, dot2 );
double b = distance( dot1, dot3 );
double c = distance( dot2, dot3 );
cout << triangle_area( a, b, c ) << endl;
return 0;
}
#18
#include <iostream.h>
#include <math.h>
void main()
{
const int N=5;
float ps[N][2]={ //按顺时针排列的顶点坐标列表
{0,0},
{1,0},
{1,1},
{0.5,0.5},
{0,1}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#include <math.h>
void main()
{
const int N=5;
float ps[N][2]={ //按顺时针排列的顶点坐标列表
{0,0},
{1,0},
{1,1},
{0.5,0.5},
{0,1}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#19
同意分割成三角片的方式
#20
不好意思,有点错误
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
这段代码有时并不能判断0,i,i+1三个点是否为逆时针方向
float k1,k2;
k1=(ps[i][1]-ps[0][1])/(ps[i][0]-ps[0][0]);
k2=(ps[i+1][1]-ps[0][1])/(ps[i+1][0]-ps[0][0]);
if (k2 < k1)
这段代码有时并不能判断0,i,i+1三个点是否为逆时针方向
#21
修正了三角形时针方向的判断
#include <iostream.h>
#include <math.h>
void main()
{
const int N=3;
float ps[N][2]={ //按顺时针的顶点坐标列表
{100,100},{147,154},{215,46}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if ((ps[i][1]-ps[0][1])*(ps[i+1][0]-ps[0][0])-(ps[i+1][1]-ps[0][1])*(ps[i][0]-ps[0][0])<0)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#include <iostream.h>
#include <math.h>
void main()
{
const int N=3;
float ps[N][2]={ //按顺时针的顶点坐标列表
{100,100},{147,154},{215,46}
};
double total=0.;
for(int i=1;i<=N-2;i++)
{
float a,b,c;
float dx,dy;
float s,area;
dx=ps[0][0]-ps[i][0];
dy=ps[0][1]-ps[i][1];
a=sqrt(dx*dx+dy*dy);
dx=ps[0][0]-ps[i+1][0];
dy=ps[0][1]-ps[i+1][1];
b=sqrt(dx*dx+dy*dy);
dx=ps[i+1][0]-ps[i][0];
dy=ps[i+1][1]-ps[i][1];
c=sqrt(dx*dx+dy*dy);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if ((ps[i][1]-ps[0][1])*(ps[i+1][0]-ps[0][0])-(ps[i+1][1]-ps[0][1])*(ps[i][0]-ps[0][0])<0)
{
area = -area;
}
total += area;
}
cout<<total<<endl;
}
#22
别费劲了
对于三角形来说,已知边长度的时候用海伦公式
在已知顶点坐标的时候看前面的yliang(风之悄语) 的说明
对于多边形更是如此
这里计算量上的差距是天壤之别的
对于三角形来说,已知边长度的时候用海伦公式
在已知顶点坐标的时候看前面的yliang(风之悄语) 的说明
对于多边形更是如此
这里计算量上的差距是天壤之别的
#23
double area = 0;
for ( i = 0; i < N; i++ )
area += p[i].x * p[(i+1)%N].y - p[(i+1)%N].x * p[i].y;
area /= 2;
cout<<area<<endl;
for ( i = 0; i < N; i++ )
area += p[i].x * p[(i+1)%N].y - p[(i+1)%N].x * p[i].y;
area /= 2;
cout<<area<<endl;
#24
这些算法只对不自相交的多边形有效,如果多边形自相交,则必须拆分成不自相交的多边形再计算。
#25
对多边行进行切割,从水平方向或垂直方向上进行切割。切割为三角形,然后求面积。