HDU2036 多边形面积模板
程序员文章站
2024-01-14 18:06:52
...
利用向量叉乘:三角形ABC面积可以利用向量 (↑AB) ×(↑AC)*(1/2)得出,对于多边形,可以随意选取多边形某一点为源点然后一次计算.对于如下:
的多边形
我们可以以P1为扇面中心,连接P1Pi就得到N-2个三角形,由于凸性,保证这些三角形全在多边形内,那么,这个凸多边形的有向面积:
A=sigma(Ai) (i=1…N-2)
- #include <stdio.h>
- #include <math.h>
- typedef struct node
- {
- double x,y;
- }node;
- node s[1001];
- double cal(node x,node y,node z)
- {
- return (y.x-x.x)*(z.y-x.y)-(y.y-x.y)*(z.x-x.x);
- }
- int main()
- {
- int n,i;
- double res;
- while(scanf("%d",&n)&&n)
- {
- res=0;
- for(i=0;i<n;i++)
- scanf("%lf%lf",&s[i].x,&s[i].y);
- for(i=1;i<n-1;i++)
- res+=cal(s[0],s[i],s[i+1]);
- printf("%.1lf\n",res/2.0);
- }
- return 0;
- }
#include <stdio.h>
#include <math.h>
typedef struct node
{
double x,y;
}node;
node s[1001];
double cal(node x,node y,node z)
{
return (y.x-x.x)*(z.y-x.y)-(y.y-x.y)*(z.x-x.x);
}
int main()
{
int n,i;
double res;
while(scanf("%d",&n)&&n)
{
res=0;
for(i=0;i<n;i++)
scanf("%lf%lf",&s[i].x,&s[i].y);
for(i=1;i<n-1;i++)
res+=cal(s[0],s[i],s[i+1]);
printf("%.1lf\n",res/2.0);
}
return 0;
}
上一篇: mysql 手动分页语句
下一篇: 手动安装mysql问题汇总