点乘
点乘(也称为内积、标量积或数量积)是线性代数中两个向量之间的一种运算,其结果是一个标量(即一个单一的数,而不是向量)。对于两个n维向量a=(a 1 ,a 2 ,…,a n )和b=(b 1 ,b 2 ,…,b n ),它们的点乘定义为:
或者,使用更简洁的向量符号表示为:
点乘具有几个重要的性质,包括但不限于:
交换律:a⋅b=b⋅a
分配律:a⋅(b+c)=a⋅b+a⋅c
与标量的乘法:k(a⋅b)=(ka)⋅b=a⋅(kb),其中k是标量。
零向量:任何向量与零向量的点乘都是0,即a⋅0=0。
模与夹角:点乘还可以用来计算两个向量之间的夹角θ的余弦值,
即
,其中∣a∣和∣b∣分别是向量a和b的模(长度)。
点乘在物理和工程中有广泛的应用,例如,在力学中,力向量与位移向量的点乘给出了力所做的功;在电学中,电场强度向量与电荷移动向量的点乘给出了电场力对电荷所做的功。
c++代码
double dot(const std::tuple<double, double>& O, const std::tuple<double, double>& A, const std::tuple<double, double>& B) {double oa_x = std::get<0>(A) - std::get<0>(O);double oa_y = std::get<1>(A) - std::get<1>(O);double ob_x = std::get<0>(B) - std::get<0>(O);double ob_y = std::get<1>(B) - std::get<1>(O);return oa_x * ob_x + oa_y * ob_y;}
求两点之间距离
double dis(const std::tuple<double, double>& p1, const std::tuple<double, double>& p2){double ans = pow((std::get<0>(p1) - std::get<0>(p2)),2 )+ pow((std::get<1>(p1) - std::get<1>(p2)), 2);return sqrt(ans);}
两向量OA,OB的夹角
double angle(const std::tuple<double, double>& O, const std::tuple<double, double>& A, const std::tuple<double, double>& B){return acos(dot(O, A, B) / (dis(O, A) * dis(O, B)));}
参考