叉积和点积及其应用简介

点积

定义

在二维平面直角坐标系中,设 a⃗ =(x1,y1),b⃗ =(x2,y2) a → = ( x 1 , y 1 ) , b → = ( x 2 , y 2 ) ,则 a⃗ b⃗ =|a⃗ ||b⃗ |cosθ a → ⋅ b → = | a → | | b → | cos ⁡ θ ,其中 θ θ 为这两个向量的夹角。坐标表示为: a⃗ b⃗ =x1y1+x2y2 a → ⋅ b → = x 1 y 1 + x 2 y 2

当然有多维向量也有点积,此时的定义用坐标表示: a⃗ b⃗ =x1y1+x2y2++xnyn a → ⋅ b → = x 1 y 1 + x 2 y 2 + ⋯ + x n y n

应用

a⃗ b⃗ =0 a → ⋅ b → = 0 时, a⃗ b⃗  a → ⊥ b → 。可以判断两条直线是否垂直。

同时,根据定义式,在知道两个以同一点为一个端点的线段长度时可以计算其夹角。

其它的暂时不知道。。。

代码实现

搞一个struct重载一下就好了。。。

//#include
struct node{
    double x,y;
}
double operator * (const node &a,const node &b){
    return a.x*b.x+a.y*b.y;
}
double len(node a){//长度
    return sqrt(a.x*a.x+a.y*a.y);
}
double _angle(node a,node b){//角度
    return acos(a*b/len(a)/len(b));//arccos,弧度制
}

叉积

定义

在二维平面直角坐标系中,设 a⃗ =(x1,y1),b⃗ =(x2,y2) a → = ( x 1 , y 1 ) , b → = ( x 2 , y 2 ) ,则 a⃗ ×b⃗ =|a⃗ ||b⃗ |sinθ a → × b → = | a → | | b → | sin ⁡ θ ,其中 θ θ 为这两个向量的夹角。坐标表示为: a⃗ b⃗ =x1y2x2y1 a → ⋅ b → = x 1 y 2 − x 2 y 1

而在空间中, a⃗ ×b⃗  a → × b → 的结果为一个向量。设 a⃗ =(x1,y1,z1),b⃗ =(x2,y2,z2) a → = ( x 1 , y 1 , z 1 ) , b → = ( x 2 , y 2 , z 2 ) ,则 a⃗ ×b⃗ =c⃗  , c=(y1z2y2z1,z1x2x1z2,x1y2y1x2) a → × b → = c →   ,   c = ( y 1 z 2 − y 2 z 1 , z 1 x 2 − x 1 z 2 , x 1 y 2 − y 1 x 2 )

应用

在二维平面中,叉积可以用来判断点与直线的位置关系。容易从定义式看出,当 b⃗  b → a⃗  a → 的逆时针(180 )方向时, a⃗ ×b⃗ <0 a → × b → < 0 ,反之 >0 > 0 ,在同一直线上时 =0 = 0 。这是一个特别常用的一个性质。

代码实现

struct node{
    double x,y;
}
double operator * (const node &a,const node &b){
    //为了避免与点积混淆可以用^
    return a.x*b.y-a.y*b.x;
}

你可能感兴趣的:(算法/总结/游记,计算几何---计算几何基础,蒟蒻zxl的Blog专栏)