凸包问题-----蛮力法

#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
struct p{
    int x,y,flag;
}point[10];
void con(){
    int a,b,c;
    int sign1,sign2;
    for(int i=0;i<10;i++){
        for(int j=i+1;j<10;j++){
            a=point[j].y-point[i].y;
            b=point[i].x-point[j].x;
            c=(point[i].x*point[j].y)-(point[i].y*point[j].x);
            sign1=0;
            sign2=0;
            for(int k=0;k<10;k++){
                if((k==j)||(k==i))continue;
                if((a*point[k].x+b*point[k].y)==c){
                    sign1++;
                    sign2++;
                }
                if((a*point[k].x+b*point[k].y)>c)
                {sign1++;}
                if((a*point[k].x+b*point[k].y)<c)
                {sign2++;}
            
            }    
            
                if((sign1==8)||(sign2==8)){
                    point[i].flag=1;
                    point[j].flag=1;
                }
        }
    }
    for(i=0;i<10;i++){
        if(point[i].flag==1){
            cout<<point[i].x<<"  "<<point[i].y<<endl;
        }
    }
}
void main(){
    srand(time(NULL));
    for(int i=0;i<10;i++){
        point[i].flag=0;
        point[i].x=rand()%10;
        point[i].y=rand()%10;
    }
    cout<<"坐标点:"<<endl;
    for(i=0;i<10;i++){
        cout<<point[i].x<<"  "<<point[i].y<<endl;
    }
    cout<<"极坐标点:"<<endl;
    con();
}

猜你喜欢

转载自blog.csdn.net/wanwu_fusu/article/details/82807842
今日推荐