几何
凸多边形的面积
#include <iostream> #include <stdio.h> #include <math.h> using namespace std; int a[1000][2]; double are(int i){ int x1,y1,x2,y2; double sum; x1=a[0][0]-a[i-1][0]; x2=a[0][0]-a[i][0]; y1=a[0][1]-a[i-1][1]; y2=a[0][1]-a[i][1]; sum=0.5*fabs(x1*y2-x2*y1); return sum; } int main(){ int n;//n个顶点 int i; double sum=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&a[i][0],&a[i][1]); for(i=2;i<n;i++) sum+=are(i); printf("%lf\n",sum); }
//求凸包的直径 分别是k和max两个点
#include <iostream> #include <stdio.h> using namespace std; //求凸包的直径 #define M 1000010 int a[M][2]; int main(){ int n; int i,k; int x,y,max; int len=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&a[i][0],&a[i][1]); max=0; k=0; for(i=1;i<n;i++){ if(len<((a[k][0]-a[i][0])*(a[k][0]-a[i][0])+(a[k][1]-a[i][1])*(a[k][1]-a[i][1]))){ len=(a[k][0]-a[i][0])*(a[k][0]-a[i][0])+(a[k][1]-a[i][1])*(a[k][1]-a[i][1]); max=i; } } k=max; len=0; for(i=0;i<n;i++){ if(len<((a[k][0]-a[i][0])*(a[k][0]-a[i][0])+(a[k][1]-a[i][1])*(a[k][1]-a[i][1]))){ len=(a[k][0]-a[i][0])*(a[k][0]-a[i][0])+(a[k][1]-a[i][1])*(a[k][1]-a[i][1]); max=i; } } printf("%d\n",(a[k][0]-a[max][0])*(a[k][0]-a[max][0])+(a[k][1]-a[max][1])*(a[k][1]-a[max][1])); }