向量的点乘与叉乘概念理解以及C++代码实现

您所在的位置:网站首页 点乘怎么乘 向量的点乘与叉乘概念理解以及C++代码实现

向量的点乘与叉乘概念理解以及C++代码实现

2024-07-11 23:05| 来源: 网络整理| 查看: 265

文章目录 1. 点乘2. 叉乘3. 代码实现 点乘与叉乘是线性代数的基本知识,在工作中也经常能够遇到,下面我们来温习一下它们的概念以及使用C++代码对它们进行实现。

1. 点乘 概念

向量的点乘,也叫点积、内积、数量积。是指在实数R上的两个向量的一种二元运算,这种运算返回一个实数值标量。点乘有两种定义方式:代数方式和几何方式。

代数方式

已知两个向量 a → = [ a 1 , a 2 , . . . , a n ] \overrightarrow{a} = [a_1, a_2,...,a_n] a =[a1​,a2​,...,an​]和 b → = [ b 1 , b 2 , . . . , b n ] \overrightarrow{b} = [b_1, b_2,...,b_n] b =[b1​,b2​,...,bn​],则向量 a → \overrightarrow{a} a 与向量 b → \overrightarrow{b} b 的内积代数定义为: a ⋅ b = a 1 b 1 + a 2 b 2 + . . . + a n b n a\cdot b=a_1b_1+a_2b_2+...+a_nb_n a⋅b=a1​b1​+a2​b2​+...+an​bn​ 代数表示:对应元素相乘相加。

几何定义(2维和3维)

已知两个向量 a → = [ x 1 , y 1 , z 1 ] \overrightarrow{a} = [x_1,y_1,z_1] a =[x1​,y1​,z1​]和 b → = [ x 2 , y 2 , z 2 ] \overrightarrow{b}=[x_2,y_2,z_2] b =[x2​,y2​,z2​],它们的模值分别为 ∣ a ∣ |a| ∣a∣和 ∣ b ∣ |b| ∣b∣,它们的夹角为 θ ∈   [ 0 , π ] \theta \in \ [0,\pi] θ∈ [0,π],那么向量 a → \overrightarrow{a} a 与向量 b → \overrightarrow{b} b 的几何定义为: a ⋅ b = ∣ a ∣ ∣ b ∣ c o s θ a\cdot b = |a||b|cos\theta a⋅b=∣a∣∣b∣cosθ 几何意义: 可以用来表示一个向量在另一个向量上的投影长度,为一个标量。

2. 叉乘

向量的叉乘,也叫叉积、外积、向量积,是一种在向量空间中(也就是说向量元素个数为3)向量的二元运算。与点积不同,叉乘的运算结果是一个向量而不是一个标量,并且两个向量的叉积与这两个向量所构成的平面垂直。

定义方式

已知两个向量 a → = [ x 1 , y 1 , z 1 ] \overrightarrow{a} = [x_1,y_1,z_1] a =[x1​,y1​,z1​]和 b → = [ x 2 , y 2 , z 2 ] \overrightarrow{b}=[x_2,y_2,z_2] b =[x2​,y2​,z2​],它们的模值分别为 ∣ a ∣ |a| ∣a∣和 ∣ b ∣ |b| ∣b∣,它们的夹角为 θ ∈   [ 0 , π ] \theta \in \ [0,\pi] θ∈ [0,π],那么向量 a → \overrightarrow{a} a 与向量 b → \overrightarrow{b} b 的叉乘表示为:

模值: ∣ a × b ∣ = ∣ a ∣ ∣ b ∣ s i n θ |a × b | = ∣ a ∣ ∣ b ∣ s i n θ ∣a×b∣=∣a∣∣b∣sinθ模的几何意义:模 ∣ a × b ∣ |a × b | ∣a×b∣, 即以a和b为两条边的平行四边形的面积方向:两个向量的叉积与这两个向量所构成的平面垂直,且遵循右手准则(右手的四指从a以不超过180°的转角转向b时,竖起的大拇指指向是叉乘的方向。)

在这里插入图片描述

坐标运算

假设: i 、 j 、 k i、j、k i、j、k分别为XYZ三个轴的单位向量,则叉乘运算表示如下:

a → × b → = ∣ i j k x 1 y 1 z 1 x 2 y 2 z 2 ∣ = [ y 1 z 2 − y 2 z 1 , − ( x 1 z 2 − x 2 z 1 ) , x 1 y 2 − x 2 y 1 ] \overrightarrow{a}×\overrightarrow{b} = \begin{vmatrix} i& j& k\\ x_1& y_1& z_1 \\ x_2& y_2& z_2 \\ \end{vmatrix}=[y_1z_2-y_2z_1,-(x_1z_2-x_2z_1),x_1y_2-x_2y_1] a ×b =∣ ∣​ix1​x2​​jy1​y2​​kz1​z2​​∣ ∣​=[y1​z2​−y2​z1​,−(x1​z2​−x2​z1​),x1​y2​−x2​y1​]

特殊情况,如果a和b在平面XY上,那么Z=0,所以上面得到的值 ∣ x 1 y 2 − x 2 y 1 ∣ |x_1y_2 - x_2y_1| ∣x1​y2​−x2​y1​∣,方向朝Z轴。

3. 代码实现

根据对上面概念的理解,相信大家可以很快就能写出自己的点乘与叉乘函数操作,这里就不介绍了。在工作实际应用中,我们可能更多的使用Eigen对它们进行调用,Eigen可以很方便的实现点乘与叉乘操作,具体代码如下:

#include #include using namespace Eigen; using namespace std; int main() { Vector3d v(1,2,3); Vector3d w(0,1,2); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3