void Shrink(int &num){
int siz=0;
// cout<<lcnt<<endl;
for(int i=1;i<=lcnt;i++){
// cout<<l[i].Ang<<endl;
if(!siz){
siz++;
temp[siz]=l[i];
}
else{
if(!(equal(temp[siz].Ang,l[i].Ang))){
siz++;
temp[siz]=l[i];
}
else{
// cout<<"now"<<endl;
if(in(l[i].p,temp[siz])){
temp[siz]=l[i];
}
}
}
}
num=siz;
for(int i=1;i<=siz;i++){
l[i]=temp[i];
}
}
int tot=0;
void Hpi(){
sort(l+1,l+lcnt+1,comp);
Shrink(lcnt);
int head=1;
int tail=2;
// cout<<lcnt<<endl;
/*int head=1;
int tail=2;*/
convex_hull[1]=l[1];
convex_hull[2]=l[2];
for(int i=3;i<=lcnt;i++){
// cout<<tail<<" "<<l[i].p.x<<" "<<l[i].p.y<<endl;
while(head<tail&&!in(getpot(convex_hull[tail],convex_hull[tail-1]),l[i]))tail--;
while(head<tail&&!in(getpot(convex_hull[head],convex_hull[head+1]),l[i]))head++;
tail++;
convex_hull[tail]=l[i];
}
while(head<tail&&!in(getpot(convex_hull[tail],convex_hull[tail-1]),convex_hull[head]))tail--;
// cout<<head<<" "<<tail<<endl;*/
convex_hull[tail+1]=convex_hull[head];
for(int i=head;i<=tail;i++){
// cout<<convex_hull[i].p.x<<" "<<convex_hull[i].p.y<<" "<<convex_hull[i].v.x<<" "<<convex_hull[i].v.y<<" <-"<<endl;
a[++tot]=getpot(convex_hull[i],convex_hull[i+1]);
// cout<<a[i].x<<" "<<a[i].y<<"---------"<<endl;
}
// cout<<tot<<endl;
}
转载于:https://www.cnblogs.com/Leo-JAM/p/10079299.html