题目
题解思路
很明显可以拆分成多个三角形进行计算。
一开始想用海伦公式,但是要求直线长度还是算了,太容易损失精度了。
然后看讨论区发现竟然能用叉乘来解决。
公式差不多这样 列出课本里的叉乘行列式就可以得到
假设p1(x1,y1),p2(x2,y2),p3(x3,y3)
int x = x2-x1;int y = y2-y1;
int x ‘ = x3-x1;int y ‘ = y3-y1;
S = x * y ’ - x ‘ * y
AC代码
#include <bits/stdc++.h>
using namespace std;
int x[105];
int y[105];
int main ()
{
int n;
while(cin>>n)
{
if(n==0)
break;
double sum=0;
for ( int i = 0; i < n;i++)
cin>>x[i]>>y[i];
for( int i = 2 ; i < n ;i++)
{
sum +=(1.0)/2*(x[i-1]-x[0])*(y[i]-y[0])-(1.0)/2*(x[i]-x[0])*(y[i-1]-y[0]);
}
printf("%.1f\n",sum);
}
return 0;
}