叉積進行極角排序

                                          

對於上圖,給定兩個向量求兩個向量叉積,可知叉積與兩向量夾角θ有關,當θ爲負數時叉積爲負,反之爲正。

有一個被稱爲右手定則的方法可以在這裏用於判斷θ的正負,四指方向爲向量旋轉方向,拇指指向爲叉積方向,當拇指指向上方時爲θ爲正,反之爲負。

想想sort函數,當我們要對sort進行從大到小順序的排列時:
 

bool cmp(int a,int b){
    return a>b;
}

sort(num,num+n,cmp);

類比這種方法,我們可以使用sort進行極角排序。

struct cmp{
        Point p;
        cmp(const Point &p0){p=p0;}
        bool operator()(const Point &aa,const Point &bb){
            Point a=aa,b=bb;
            int d=sgn((a-p)^(b-p));
            if(d==0){
                return sgn(a.distance(p)-b.distance(p))<0;
            }
            return d>0;
        }
    };

sort(p,p+n,cmp(p[0]));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章