讨论 / 三种方法
沧海一声喵 2018-01-26 21:58:08
点我顶贴 收藏 删除
方法一:梯形剖分

#include <cstdio>

#include <cmath>

using namespace std;

int main(){

int i,n;

double x[101],y[101],area=0;

scanf("%d",&n);

for(i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);

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

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

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

area=fabs(area);

printf("%.0f",area);

return 0;}

方法二:三角剖分

#include <cstdio>

#include <cmath>

using namespace std;

int main(){

int i,n;

double x[101],y[101],area=0;

scanf("%d",&n);

for(i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);

for(i=2;i<=n-1;i++)

area+=(x[i+1]-x[i])*(y[1]-y[i])-(y[i+1]-y[i])*(x[1]-x[i]);

area=fabs(area)/2;

printf("%.0f",area);

return 0;}

方法三:叉积

#include <cstdio>

#include <cmath>

using namespace std;

int main(){

int i,n;

double x[101],y[101],area=0;

scanf("%d",&n);

for(i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);

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

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

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

area=fabs(area);

printf("%.0f",area);

return 0;}

查看更多回复
提交回复