题目大意
眼下出现在 HansBug 蒟蒻面前的是一个奇怪的磁场,形状为多边形,可以描述为 N 个点构成的序列,这些点即依次为该磁场的各个顶点。于是现在蒟蒻 HansBug 想要知道该磁场的磁通量为多少。可是他脑细胞和 RP 已经消耗殆尽,所以这个高端的任务就交给你们啦。
这是一道神奇的题目……
我看了半天,发现有这样一句话:
磁通量 = 磁感应强度 × 磁场区域面积。
反正就是求一个多边形的面积,再乘上一个数即可。
思路
如果是凸多边形的话,我们可以将其分成许多个三角形计算。
我们知道逃,三角形的面积等于向量外积的绝对值的一半。
这是因为平行四边形的面积在数值上等于两边的向量的外积。
但是还有凹多边形的情况,我们想想后会发现,有的外积是正的,有的是负的,它们正好可以把多余的部分抵消!
代码
一不小心写长了……
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct point{double x,y;}p[100005];
int n;
double ans,b;
inline double cj(point a1,point a2,point b1,point b2){
return (a2.x-a1.x)*(b2.y-b1.y)-(b2.x-b1.x)*(a2.y-a1.y);
}//外积
int main(){
scanf("%d%lf",&n,&b);
for(int i=1;i<=n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);//输入
for(int i=2;i<=n-1;i++)
ans+=cj(p[1],p[i],p[1],p[i%n+1]);
printf("%.4lf\n",fabs(ans*b/2.));//最后再求绝对值
return 0;
}
最后一次更新于2021-01-30
0 条评论