几何

凸多边形的面积

#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]));
}

 

posted on 2016-03-12 13:24  猪是的念来过倒  阅读(250)  评论(0编辑  收藏  举报