【幾何】初步
阿新 • • 發佈:2018-02-28
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);
【幾何】初步