向量的叉积 凸包

 
  
向量的叉积(凸包)
1. 向量的叉积的模表示这两个向量围成的平行四边形的面积。 设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,即:P×Q = x1*y2 - x2*y1,其结果是一个伪矢量。 显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。 2. 叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系: 若 P × Q > 0 , 则P在Q的顺时针方向。 若 P × Q < 0 , 则P在Q的逆时针方向。 若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向。 3. 叉积的方向与进行叉积的两个向量都垂直,所以叉积向量即为这两个向量构成平面的法向量。 4. 如果向量叉积为零向量,那么这两个向量是平行关系。 因为向量叉积是这两个向量平面的法向量,如果两个向量平行无法形成一个平面,其对应也没有平面法向量。所以,两个向量平行时,其向量叉积为零。 例子: 给定一个点集,求点积中离得最远的两个点的距离! #include #include #include #include using namespace std; #define exp 0.0000000001 typedef struct point { int x,y; double degree; }rr; point a[50005]; int n; int b[50005],Max; int cmp(const void *a,const void *b) { point *c=(point *)a; point *d=(point *)b; if(fabs(c->degree-d->degree)>exp) return c->degree>d->degree?1:-1; else//相等的情况 return c->x-d->x;//升序排列 } void Sort() { int i,j,x=INT_MAX,y=INT_MAX; for(i=0; iq; q.push(0); q.push(1);//先进去两个的 for(i=2; iMax) Max=s; } } } int main() { int i; while(scanf("%d",&n)!=EOF) { for(i=0; i

你可能感兴趣的:(模板)