本文主要是介绍【洛谷 2785】物理1(phsic1)- 磁通量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目】
传送门
题目背景:
蒟蒻 HansBug 在物理考场上,挠了无数次的头,可脑子里还是一片空白。
题目描述:
眼下出现在 HansBug 蒟蒻面前的是一个奇怪的磁场,形状为多边形,可以描述为 n n n 个点构成的序列,这些点即依次为该磁场的各个顶点。于是现在蒟蒻 HansBug 想要知道该磁场的磁通量为多少。可是他脑细胞和 RP 已经消耗殆尽,所以这个高端的任务就交给你们啦。
输入格式:
第一行为一个整数 n n n( 1 ≤ n ≤ 1000000 1\le n\le1000000 1≤n≤1000000)和一个实数 b b b( 0 < b ≤ 10 0<b\le10 0<b≤10), b b b 为磁感应强度。
第 2 − n + 1 2 - n+1 2−n+1 行,每行包含两个实数,表示该点的横纵坐标。
输出格式:
一行,包含一个实数,即为磁通量(输出四舍五入保留四位小数)。
样例数据:
【样例 1 1 1】
输入
3 1
0 0
1 0
0 2
输出
1.0000
【样例 2 2 2】
输入
4 1
1 1
1 -1
-1 -1
-1 1
输出
4.0000
说明:
磁通量=磁感应强度*磁场区域面积
【分析】
求多边形面积的典型题目啦
题目中的点应该是按逆时针给出的,我开始还在琢磨怎么把点按逆时针排序呢
【代码】
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000005
using namespace std;
struct point
{double x,y;point(){}point(double x,double y):x(x),y(y){}point operator+(const point &a){return point(x+a.x,y+a.y);}point operator-(const point &a){return point(x-a.x,y-a.y);}friend double dot(const point &a,const point &b){return a.x*b.x+a.y*b.y;}friend double cross(const point &a,const point &b){return a.x*b.y-b.x*a.y;}
}p[N];
int main()
{int n,i;double B,S=0;scanf("%d%lf",&n,&B);for(i=1;i<=n;++i)scanf("%lf%lf",&p[i].x,&p[i].y);p[n+1]=p[1];for(i=1;i<=n;++i)S+=cross(p[i],p[i+1])*0.5;printf("%.4lf",S*B);return 0;
}
这篇关于【洛谷 2785】物理1(phsic1)- 磁通量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!