由于几何问题一般是压轴题,对我来说过于复杂,而且这一块是交给队友了的,所以自己都没怎么做过。
为了应对蓝桥杯,和一些简单比赛,还是应该做几个几何水题,以免到时候遇到很水的题我都没有信心去做。
首先,向量是基础,可以方便使用加减乘除,可以有很多模板,而且能尽可能避免除法和三角函数,精度高,效率高。
对于向量的点积: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);