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

这篇具有很好参考价值的文章主要介绍了向量的点乘与叉乘概念理解以及C++代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


点乘与叉乘是线性代数的基本知识,在工作中也经常能够遇到,下面我们来温习一下它们的概念以及使用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 ab=a1b1+a2b2+...+anbn
代数表示:对应元素相乘相加。

  • 几何定义(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 ab=a∣∣bcosθ
几何意义: 可以用来表示一个向量在另一个向量上的投影长度,为一个标量。

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

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

  • 坐标运算

假设: i 、 j 、 k i、j、k ijk分别为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 = ix1x2jy1y2kz1z2 =[y1z2y2z1,(x1z2x2z1),x1y2x2y1]

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

3. 代码实现

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

#include <iostream>
#include <Eigen/Dense>
 
using namespace Eigen;
using namespace std;
int main()
{
  Vector3d v(1,2,3);
  Vector3d w(0,1,2);
 
  cout << "Dot product: " << v.dot(w) << endl;//点乘
  double dp = v.adjoint()*w; //等同于点法
  cout << "Dot product via a matrix product: " << dp << endl;
  cout << "Cross product:\n" << v.cross(w) << endl;//叉乘
}

输出:
向量的点乘与叉乘概念理解以及C++代码实现文章来源地址https://www.toymoban.com/news/detail-439109.html

到了这里,关于向量的点乘与叉乘概念理解以及C++代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 向量的点乘和叉乘

    1. 向量的点乘 定义 : 向量点乘又称为内积,结果为 标量。 已知空间中的两个向量: a = (x1,y1,z1) , b = (x2,y2,z2) , 则向量 a 和向量 b的内积为:   几何意义 :        点乘的结果表示 a  在  b  方向上的 投影 与 || b || 的乘积,反映了两个向量在方向上的相似度,结果越大越

    2024年02月02日
    浏览(34)
  • 向量的点乘、叉乘和混合积(三重积)

    设、、为三个向量,三重矢积公式 上述的两个公式也称为拉格朗日公式。  三重矢积的公式有三个特性: 1) 两个分项都带有三个向量( 、、); 2) 三重积一定是先做叉积的两向量之线性组合; 3) 中间的向量所带的系数一定为正(此处为向量)。 特别的: 逆交换律: 任意

    2024年02月11日
    浏览(31)
  • 【Unity每日一记】方位辨别—向量的叉乘点乘结合

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月12日
    浏览(31)
  • 【Unity每日一记】Unity中的方位辨别—向量的叉乘点乘结合

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(36)
  • 叉乘、向量积的计算以及推导

    几何图示: 设有 a = ( a x , a y , a z ) , b = ( b x , b y , b z ) mathbf{a}=left(a_{x}, a_{y}, a_{z}right), mathbf{b}=left(b_{x}, b_{y}, b_{z}right) a = ( a x ​ , a y ​ , a z ​ ) , b = ( b x ​ , b y ​ , b z ​ ) i , j , k 分别是 X , Y , Z 轴方向的单位向量,则: a × b = ( a y b z − a z b y ) i + ( a z b x − a

    2024年02月16日
    浏览(36)
  • 【理解线性代数】(四)从向量组点乘到矩阵相乘

    工业生产的发展趋势总是从单件生产到批量生产。科学技术研究也是一样,总是从简单计算到复合运算、批量运算。批量意味着生产能力、处理能力的提升。计算机从16位发展到64位,从单核发展到多核;计算机从CPU处理数据发展到GPU处理数据;大数据、人工智能领域的大模型

    2024年02月09日
    浏览(37)
  • 【数理知识】矩阵普通乘积,哈达玛积,克罗内克积,点乘,点积,叉乘,matlab代码实现

    序号 内容 1 【数理知识】向量数乘,内积,外积,matlab代码实现 2 【数理知识】矩阵普通乘积,哈达玛积,克罗内克积,点乘,点积,叉乘,matlab代码实现 首先介绍矩阵 在数学中,矩阵是一个按照长方阵列排列的复数或实数集合。由 m × n m times n m × n 个数 a i j a_{ij} a ij ​

    2024年02月04日
    浏览(72)
  • 线性代数的学习和整理22:矩阵的点乘(草稿)

    4  矩阵乘法 A,B两个同阶同秩N阵,看上去结构一样,但两厢相乘,在做在右,地位差别巨大。 在左,你就是基,是空间的根本,是坐标系,是往哪去、能到哪的定海神针,是如来佛手;在右,你就只是乾坤已定后数量的选择,你是翻十个跟头,还是翻十一个(都出不了如来佛

    2024年02月09日
    浏览(51)
  • MATLAB中如何实现n个矩阵的点乘或相加

      - 如果你的矩阵都是同样的大小,你可以将它们存储在一个三维数组中,然后使用sum函数沿着第三个维度求和。例如,如果你有三个2×2的矩阵A、B和C,你可以这样做:   ```markdown M = cat(3,A,B,C); % 将A、B、C沿着第三个维度拼接成一个2×2×3的数组 S = sum(M,3); % 沿着第三个维度求

    2024年02月06日
    浏览(34)
  • 矩阵与向量的运算:矩阵的加法、数乘与乘法

    作者:禅与计算机程序设计艺术 \\\"矩阵与向量的运算\\\"是机器学习领域的一个基础课。在实际应用中,许多算法都需要涉及到矩阵运算。理解并掌握这种运算对于解决复杂的问题和优化模型性能至关重要。本文将带您快速了解矩阵的概念,以及如何进行矩阵运算。 \\\"行列式\\\"是指

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包