1. 程式人生 > >【幾何】初步

【幾何】初步

poj 自己 href 水題 printf spa ret 順時針 排序

由於幾何問題一般是壓軸題,對我來說過於復雜,而且這一塊是交給隊友了的,所以自己都沒怎麽做過。

為了應對藍橋杯,和一些簡單比賽,還是應該做幾個幾何水題,以免到時候遇到很水的題我都沒有信心去做。

首先,向量是基礎,可以方便使用加減乘除,可以有很多模板,而且能盡可能避免除法和三角函數,精度高,效率高。

對於向量的點積:p*q*cos<o> 求同向還是異向;求投影;求出投影後用勾股定理求點到直線距離。

對於向量的叉積:p*q*sin<o> 求面積;求順時針方向還是逆時針方向;判斷是否在半平面上。

(叉積表示有向面積,小於180度為正。)

POJ2007:Scrambled Polygon :給定凸多邊形的頂點(保證第一個是(0,0)),求按順序輸出頂點(保證無三點共線)。

利用叉積排序,兩個向量(頂點減(0,0))的叉積a^b,如果a^b>0,說明b在a的順時針方向。(如果不是凸多邊形不成立,如果三點共線不成立)。

//對於凸多邊形,以0為起點的向量,叉積排序。 struct Vector { int x;int y;} node[maxn];
bool cmp(Vector a,Vector b)
{
    return (a.x*b.y-a.y*b.x)>0;
}
sort(node+1,node+cnt,cmp);
for(int i=0;i<cnt;i++) printf("(%d,%d)\n",node[i].x,node[i].y);
 

【幾何】初步