精华内容
下载资源
问答
  • 蒙哥马利梯子点乘.pdf

    2020-08-01 11:10:52
    蒙哥马利梯子点乘算法。[k]P:椭圆曲线上点P的k倍点,即:[k]P = {P+P+……+P},k个P相加,即点乘。其中k是正整数。
  • 今天小编就为大家分享一篇pytorch点乘与叉乘示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Tensorflow二维、三维、四维矩阵运算(矩阵相乘,点乘,行/列累加) 1. 矩阵相乘 根据矩阵相乘的匹配原则,左乘矩阵的列数要等于右乘矩阵的行数。 在多维(三维、四维)矩阵的相乘中,需要最后两维满足匹配原则。 ...
  • matlab代码中向量的点乘 Python程式设计作业 该存储库包含Andrew Ng教授教的编程作业的python版本。 这也许是最受欢迎的在线机器学习入门课程。 除了受欢迎之外,它还是任何有兴趣的学生可以上的最好的机器学习课程...
  • 文中针对含有噪声的图像,提出了一种分段点乘的图像分割算法。具体方法是首先根据灰度直方图确定图像的多灰度区域,然后实施分段点乘运算,使得图像中暗的部分更暗、亮的部分更亮,提高了目标和背景的对比度,突显了...
  • ECC点乘verilog硬件实现

    2017-12-15 18:42:40
    实现了ECC点乘,二进制伽罗瓦域,顶层点乘算法模块使用了一篇论文中介绍的高速点乘运算
  • matlab代码中向量的点乘描述 朗多是一个局域网瓜哥与非盟tomatic分化d ynamical系统。 Landau是图灵不完整的静态类型特定于域的可区分语言。 图灵不完整性提供了复杂的源代码分析能力,并因此提供了高度优化的编译...
  • matlab代码中向量的点乘 Python程式设计作业 该存储库包含Andrew Ng教授教的编程作业的python版本。 这也许是最受欢迎的在线机器学习入门课程。 除了受欢迎之外,它还是任何有兴趣的学生可以上的最好的机器学习课程...
  • matlab代码中向量的点乘Python¶Python是一种高级的,动态类型化的多范例编程语言。 Python代码通常被称为几乎类似于伪代码,因为它使您可以在很少的代码行中表达非常强大的思想,同时又易于阅读。 例如,这是经典的...
  • Matlab 高维矩阵与向量的点乘 (Permute) 今天遇到一个问题,如何用一个n维的向量点乘一个m×k×nm\times k\times nm×k×n 的矩阵, 并避免用循环。Matlab矩阵实验室名不虚传,通过permute这个命令可以有效解决这...
  • matlab代码中向量的点乘适用于现代Fortran(ttb)的Tensor工具箱 商业FEM软件包为自定义定义的用户资料(例如UMAT中的HYPELA2)提供了接口(用Fortran编写的用户子例程)。 与其他科学编程语言(例如MATLAB或Python...
  • 点乘

    2021-07-19 11:33:42
    点乘公式 Vector3.Dot 点乘的结果是一个数值 a(x,y,z) b(q,a,c) a点b= aq+ya+zc 结果大于0 两个向量的夹角是锐角 结果等于0 两个向量的夹角是直角 结果小于0 两个向量的夹角是钝角 应用 判断 一个物体在另一个物体的...

    点乘公式

    点乘的结果是一个数值
    a(x,y,z) b(q,a,c)
    a点b= xq+ya+zc
    结果大于0 两个向量的夹角是锐角
    结果等于0 两个向量的夹角是直角
    结果小于0 两个向量的夹角是钝角
    API: Vector3.Dot

    应用

    判断 一个物体在另一个物体的前方还是后方
    通过两个物体的位置 得到向量 使用该向量和其中一个物体的 transform.forward 点乘 利用结果判断方向
    大于0 在前方 小于0 在后方

    例子

    Debug.DrawLine(transform.position, transform.forward * 5 + transform.position, Color.red);
    Debug.DrawLine(transform.position, cam.position, Color.green);
    temp = cam.position - transform.position;
    Vector3.Dot 点乘 参数2 投影的向量
    print(temp.x*transform.forward.x+ temp.y * transform.forward.y+ temp.z * transform.forward.z);
    效果同下
    print(Vector3.Dot(transform.forward,temp));
    

    获取夹角弧度

    在这里插入图片描述
    原理:
    余弦值= 向量点积/向量的模长
    单位向量点乘=向量点积/向量的模长
    余弦值=单位向量点乘
    利用反三角函数得到弧度
    Asin(单位向量点乘)=Asin(余弦值)=对应的弧度
    API:Vector3.Angle
    注:Angle函数的参数不需要是单位向量
    transform.forward 是单位向量

    print(Mathf.Acos(Vector3.Dot(transform.forward, temp.normalized))*Mathf.Rad2Deg);
    效果同下
    print(Vector3.Angle(transform.forward,temp));
    
    展开全文
  • matlab代码中向量的点乘 Stata 新命令:matmh——扩展版的矩阵运算命令 作者:王美庭 Email: 更新记录 2020年7月2日:解决了 matmh rown A = "2020-07-02" "2020-08-04"无法运行的情况。 摘要 本文主要介绍了个人...
  • matlab代码中向量的点乘Matlube 用于矩阵库的Scala DSL。 Matlube是Scala的类似于Matlab的线性代数DSL。 该库仅支持密集双矩阵。 它旨在用作其他Java Matrix库的前端。 当前,有两个后端:一个用于Jama(),另一个...
  • matlab代码中向量的点乘## MATLAB CHEAT SHEET ###适用于需要将MATLAB代码转换为“常规”代码的开发人员。 长度 返回矩阵或向量中的行数 ###### MATLAB示例 n = length(matrixA); 行汇总 返回一个包含每一行之和的...
  • 转换乘法为平方运算, 是一种快速计算椭圆曲线密码点乘的代数方法。利用此方法, 提出了素域Fp上雅可比坐标系下的3P和3kP算法, 其运算量分别为6[M] 10[S]和6k[M] 10k[S], 与已有的最好算法相比, 算法效率分别...
  • 基于网络并行计算,提出椭圆曲线公钥密码体制点乘运算在网络并行环境中实现的算法,详细分析了并行环境中的装箱问题,建立了并行子任务分派的数学模型,并对模型的采用贪心策略的FirstFit算法就行求解,解决了网络...
  • 在深入分析混合结构乘法器并在FPGA上实现经典椭圆曲线点乘算法基础上,设计与实现了一种基于NAF编码混合结构乘法器思想的椭圆曲线点乘算法。对实现的点乘算法进行仿真测试和性能评估表明,新设计实现的基于混合结构...
  • 多核cpu和gpu系统上椭圆曲线点乘并行计算研究.pdf
  • 三维矢量运算(点乘、差乘),有代码,opengl运行。
  • a_23 · b_3(√)/b_3 · a_23(报错) print("a_23点乘b_3的结果:", np.dot(a_23,b_3)) print("a_23点乘b_3.T的结果:", np.dot(a_23,b_3.T)) #print("b_3点乘a_23的结果:", np.dot(b_3,a_23)) #报错 #print("b_3.T...

    第一次写博客,多多关照。

    import numpy as np
    #当二维矩阵为p*p维
    
    #创建2*2的二维矩阵
    a_22 = np.array([[1,2],[3,4]]) #(2,2)
    print("a_22:", a_22)
    print("a_22的形状:", a_22.shape)
    print("a_22的维度:", a_22.ndim) #2
    
    print("-"*180)
    
    #创建一维数组
    b_2 = np.array([1,2]) #(2,)
    print("b_2:", b_2)
    print("b_2的形状:", b_2.shape)
    print("b_2的维度:", b_2.ndim) #1
    
    print("-"*180)
    
    #二维矩阵与一维数组点乘/一维数组与二维矩阵点乘:a_22 · b_2/b_2 · a_22
    print("a_22点乘b_2的结果:", np.dot(a_22,b_2))  #[ 5 11] #5=1*1+2*2,11=3*1+4*2,此时b_2被看成了2×1的矩阵
    print("a_22点乘b_2.T的结果:", np.dot(a_22,b_2.T)) #[ 5 11]
    print("b_2点乘a_22的结果:", np.dot(b_2,a_22))  #[ 7 10] 7=1*1+2*3,10=1*2+2*4,此时b_2被看成了1×2的矩阵
    print("b_2.T点乘a_22的结果:", np.dot(b_2.T,a_22)) #[ 7 10]
                                                                    # #从结果来看,一维数组的转置不影响点乘的结果,但是二维矩阵和一维数组的位置会影响点乘的结果
                                                                    #当一维数组在右边时,不论是否转置,会默认变成p行1列的矩阵,即p*1
                                                                    #当一维数组在左边时,不论是否转置,会默认变成1行p列的矩阵,即1*p
                                                                    #不管b进行.T运算与否,b被看成什么样子完全由乘法的顺序和a的形状决定
    print("-"*180)
    
    ##二维矩阵与一维数组相乘/一维数组与二维矩阵相乘:a_22 * b_2/b_2 * a_22
    print("a_22乘b_2的结果:\n", a_22 * b_2)
    print("a_22乘b_2.T的结果:\n", a_22 * b_2.T)
    print("b_2乘a_22的结果:\n", b_2 * a_22)
    print("b_2.T乘a_22的结果:\n", b_2.T * a_22)  #从结果来看,一维数组的转置不影响相乘的结果,且二维矩阵和一维数组的位置不会影响相乘的结果
                                                 #相乘的结果的形状为2维方阵的形状,即p*p
    
    print("以上都是二维矩阵为p*p类型的,即为方阵类型的与一维数组的点乘和相乘的结果" + "="*180)
    print("\n\n\n")
    
    #当二维矩阵为m*n维
    #创建2*3的二维矩阵
    a_23 = np.array([[1,2,3],[4,5,6]]) #(2,3)
    print("a_23:", a_23)
    print("a_23的形状:", a_23.shape)
    print("a_23的维度:", a_23.ndim) #2
    
    print("-"*180)
    
    #创建一维数组
    b_3 = np.array([1,2,3]) #(3,)
    print("b_3:", b_3)
    print("b_3的形状:", b_3.shape)
    print("b_3的维度:", b_3.ndim)
    
    print("-"*180)
    
    #二维矩阵与一维数组点乘/一维数组与二维矩阵点乘:a_23 · b_3(√)/b_3 · a_23(报错)
    print("a_23点乘b_3的结果:", np.dot(a_23,b_3))
    print("a_23点乘b_3.T的结果:", np.dot(a_23,b_3.T))
    #print("b_3点乘a_23的结果:", np.dot(b_3,a_23)) #报错
    #print("b_3.T点乘a_23的结果:", np.dot(b_3.T,a_23)) #报错
                                                            #从结果来看,一维数组的转置不影响点乘的结果,但是二维矩阵和一维数组的位置会影响点乘的结果
                                                            #当一维数组的shape[0] == 二维矩阵的shape[0]时,只有一维数组在左边才能和二维矩阵点乘
                                                            #当一维数组的shape[0] == 二维矩阵的shape[1]时,只有一维数组在右边才能和二维矩阵点乘
    
    print("-"*180)
    
    #二维矩阵与一维数组相乘/一维数组与二维矩阵相乘:a_23 * b_3/b_3 * a_23
    print("a_23乘b_3的结果:\n", a_23 * b_3)
    print("a_23乘b_3.T的结果:\n", a_23 * b_3.T)
    print("b_3乘a_23的结果:\n", b_3 * a_23)
    print("b_3.T乘a_23的结果:\n", b_3.T * a_23)            #从结果来看,一维数组的转置不影响相乘的结果,且二维矩阵和一维数组的位置不会影响相乘的结果
                                                           #但上面有一个前提,前提就是一维数组的shape[0] == 二维矩阵的列数,即一维数组的shape[0] == 二维矩阵的shape[1]
    # print("a_23乘b_2的结果:\n", a_23 * b_2) #报错
    # print("a_23乘b_2.T的结果:\n", a_23 * b_2.T) #报错
    # print("b_2乘a_23的结果:\n", b_2 * a_23) #报错
    #print("b_2.T乘a_23的结果:\n", b_2.T * a_23) #报错
    
    print("-"*180)
    
    #创建3*2的二维矩阵
    a_32 = np.array([[1,2],[3,4],[5,6]]) #(3,2)
    print("a_32:", a_32)
    print("a_32的形状:", a_32.shape)
    print("a_32的维度:", a_32.ndim) #2
    
    print("-"*180)
    
    #二维矩阵与一维数组相乘/一维数组与二维矩阵相乘:a_32 · b_2/b_2 · a_32
    print("a_32乘b_2的结果:\n", a_32 * b_2) #√
    print("a_32乘b_2.T的结果:\n", a_32 * b_2.T) #√
    print("b_2乘a_32的结果:\n", b_2 * a_32) #√
    print("b_2.T乘a_32的结果:\n", b_2.T * a_32) #√
    
    #总结:矩阵相乘时,一维数组的shape[0] == 二维矩阵的列数才能相乘,如果都是二维矩阵,那么要求行列必须对应相等,运用的是广播机制
    总结:
        矩阵相乘时,一维数组的shape[0] == 二维矩阵的列数才能相乘,如果都是二维矩阵,那么要求行列必须对应相等,运用的是广播机制。
    矩阵点乘时:
    1.当一维数组与p*p类型二维矩阵点乘时:
    当一维数组在右边时,不论是否转置,会默认变成p行1列的矩阵(右边就必须竖着),即p*1,当一维数组在左边时,不论是否转置,会默认变成1行p列的矩阵,即1*p(左边就必须横着)。
    2.当一维数组与m*n类型二维矩阵点乘时:
    一维数组的shape[0] == 二维矩阵的shape[0]时,只有一维数组在左边才能和二维矩阵点乘,当一维数组的shape[0] == 二维矩阵的shape[1]时,只有一维数组在右边才能和二维矩阵点乘。
    
    小口诀:离谁近,才能点乘,比如(2,)·(2,3)可以,但是(2,3)·(2,)就不行
    
    展开全文
  • matlab点乘

    千次阅读 2021-04-15 16:06:39
    矩阵点乘与乘 点乘:将向量的每个元素对应进行相乘。 注意:矩阵维度要相同! eg:P=[1 2 3] U=[1 2 3; 4 5 6] P.*U=[1 4 9; 4 10 18] 运行: P = 1 2 3 U = 1 2 3 4 5 6 P.*U ans = 1 4 9 4 10 18 P’.*U,...

    #矩阵运算
    矩阵点乘与乘
    点乘:将向量的每个元素对应进行相乘。
    注意:矩阵维度要相同!
    eg:P=[1 2 3]
    U=[1 2 3; 4 5 6]
    P.*U=[1 4 9; 4 10 18]
    运行:
    P =

     1     2     3
    

    U =

     1     2     3
     4     5     6
    

    P.*U

    ans =

     1     4     9
     4    10    18
    

    P’.*U,OMG 报错:矩阵维度必须一致。
    总结:P:[m1,n1],U:[m2,n2];
    维度需满足:n1=n2, m 1 ≤ m 2 m1\leq m2 m1m2;或者 m1=m2, n 1 ≤ n 2 n1\leq n2 n1n2;
    如果P是一个列向量或行向量,P.*U= U * diag( P )
    可以节省计算空间。

    展开全文
  • 对于游戏行业程序员来说,向量“点乘”和“叉乘”是非常熟悉的运算。从代码上看他们很简单:(以下代码选自UE4的“Vector.h”) 点乘就是各分量逐项相乘,最终得到了一个标量: FORCEINLINE float FVector::Dot...

    目标

    对于游戏行业程序员来说,向量“点乘”和“叉乘”是非常熟悉的运算。从代码上看他们运算过程并不复杂:(以下代码选自UE4的“Vector.h”)

    点乘就是各分量逐项相乘,最终得到了一个标量

    FORCEINLINE float FVector::DotProduct(const FVector& A, const FVector& B)
    {
    	return X*V.X + Y*V.Y + Z*V.Z;
    }
    

    叉乘最终得到一个新的向量,虽然其运算现在看起来略显“奇怪”(不过,在随后的证明中可以看出其重要的几何意义):

    FORCEINLINE FVector FVector::CrossProduct(const FVector& A, const FVector& B)
    {
    	return FVector
    		(
    		Y * V.Z - Z * V.Y,
    		Z * V.X - X * V.Z,
    		X * V.Y - Y * V.X
    		);
    }
    

    即:
    a ⃗ ⋅ b ⃗ = x a x b + y a y b + z a z b \vec{a}\cdot\vec{b} = x_ax_b+y_ay_b+z_az_b a b =xaxb+yayb+zazb

    a ⃗ × b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) \vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) a ×b =(yazbzayb,zaxbxazb,xaybyaxb)

    他们各自都有重要的几何意义,经常会出现在有关空间计算的逻辑中,例如:

    • 标准化后向量点乘得到的值为夹角的余弦。这样,只要计算点乘,得到-1~ 0 ~1,便可知道两个向量之间方向的关系是相反 ~ 垂直 ~ 相同
    • 向量叉乘后得到的新向量一定和原先两个向量垂直。
    • 向量叉乘后得到的向量的模,其值为两个向量构成的三角形的面积的二倍。

    向量点乘和叉乘的这些特性经常被使用,但是对于其中的数学原理我是模糊不清的,因此我想自己动手证明一下。

    而为了让这些证明得更容易,我还需要在此之前证明其基于的一些定理。

    1. 证明:勾股定理

    定理:
    对于一个直角三角形ABC,其中直角为∠BAC,有:
    B C 2 = A B 2 + A C 2 BC^2=AB^2+AC^2 BC2=AB2+AC2


    其证明网上有很多种,下面的方法据说来自于欧几里得的《几何原本》。
    在这里插入图片描述
    (图片来源勾股定理_百度百科

    由于 三角形FBC正方形GFBA 同底等高,所以有:
    S F B C × 2 = S G F B A S_{FBC}\times2=S_{GFBA} SFBC×2=SGFBA

    由于 三角形FBC三角形ABD 为全等三角形,所以有:
    S F B C = S A B D S_{FBC}=S_{ABD} SFBC=SABD

    由于 三角形ABD矩形BDLK 同底等高,所以有:
    S A B D × 2 = S B D L K S_{ABD}\times2=S_{BDLK} SABD×2=SBDLK

    因此:
    S G F B A = S F B C × 2 = S A B D × 2 = S B D L K S_{GFBA}=S_{FBC}\times2=S_{ABD}\times2=S_{BDLK} SGFBA=SFBC×2=SABD×2=SBDLK

    同理:
    S A C I H = S K L E C S_{ACIH}=S_{KLEC} SACIH=SKLEC

    (即图中粉色正方形的面积等于粉色矩形的面积,蓝色正方形的面积等于蓝色矩形的面积)

    因此:
    B C 2 = S B D E C = S B D L K + S K L E C = S G F B A + S A C I H = A B 2 + A C 2 \begin{aligned} BC^2 & =S_{BDEC}\\ & =S_{BDLK}+S_{KLEC}\\ & =S_{GFBA}+S_{ACIH}\\ & = AB^2+AC^2\\ \end{aligned} BC2=SBDEC=SBDLK+SKLEC=SGFBA+SACIH=AB2+AC2

    2. 证明:余弦定理

    定理:
    对于任意一个三角形ABC,有:
    A B 2 = B C 2 + A C 2 − 2 B C ⋅ A C ⋅ c o s C AB^2=BC^2+AC^2-2BC \cdot AC \cdot cosC AB2=BC2+AC22BCACcosC


    证明网上也有很多种,下面的方法据说也来自于欧几里得的《几何原本》。
    在这里插入图片描述

    在直角三角形ADC中,有:
    A D = A C ⋅ s i n C AD = AC \cdot sinC AD=ACsinC

    C D = A C ⋅ c o s C CD = AC \cdot cosC CD=ACcosC

    在CB边上,有:
    D B = B C − C D = B C − A C ⋅ c o s C DB= BC-CD=BC- AC \cdot cosC DB=BCCD=BCACcosC

    在直角三角形ADB中,由勾股定理可得:
    A B 2 = A D 2 + D B 2 = ( A C ⋅ s i n C ) 2 + ( B C − A C ⋅ c o s C ) 2 = A C 2 ⋅ s i n C 2 + B C 2 + A C 2 ⋅ c o s C 2 − 2 B C ⋅ A C ⋅ c o s C = B C 2 + A C 2 ⋅ s i n C 2 + A C 2 ⋅ c o s C 2 − 2 B C ⋅ A C ⋅ c o s C = B C 2 + A C 2 ( s i n C 2 + c o s C 2 ) − 2 B C ⋅ A C ⋅ c o s C = B C 2 + A C 2 − 2 B C ⋅ A C ⋅ c o s C \begin{aligned} AB^2 & =AD^2+DB^2\\ & =(AC \cdot sinC)^2+(BC- AC \cdot cosC)^2\\ & =AC^2\cdot sinC^2+BC^2+AC^2\cdot cosC^2-2BC \cdot AC \cdot cosC\\ & =BC^2+AC^2\cdot sinC^2+AC^2\cdot cosC^2-2BC \cdot AC \cdot cosC\\ & =BC^2+AC^2(sinC^2+cosC^2)-2BC \cdot AC \cdot cosC\\ & =BC^2+AC^2-2BC \cdot AC \cdot cosC\\ \end{aligned} AB2=AD2+DB2=(ACsinC)2+(BCACcosC)2=AC2sinC2+BC2+AC2cosC22BCACcosC=BC2+AC2sinC2+AC2cosC22BCACcosC=BC2+AC2(sinC2+cosC2)2BCACcosC=BC2+AC22BCACcosC

    3. 证明:向量点乘的几何意义——结果为模相乘再乘夹角余弦

    向量点乘的定义如下:
    a ⃗ ⋅ b ⃗ = x a x b + y a y b + z a z b \vec{a}\cdot\vec{b} = x_ax_b+y_ay_b+z_az_b a b =xaxb+yayb+zazb

    现在想证明的是:(其中θ为两向量夹角)
    a ⃗ ⋅ b ⃗ = ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ \vec{a}\cdot\vec{b} =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta a b =a b cosθ


    在证明前,先看一个算不上是“定理”的结论:
    对于一个2维的向量(x,y),由于坐标系是垂直的,所以由勾股定理很容易能推导出
    2 维 向 量 长 度 2 = x 2 + y 2 2维向量长度^2=x^2+y^2 22=x2+y2

    对于一个3维的向量(x,y,z),也可以很容易能推导出:
    3 维 向 量 长 度 2 = x 2 + y 2 + z 2 3维向量长度^2=x^2+y^2+z^2 32=x2+y2+z2


    下面正式开始证明:
    在这里插入图片描述

    如果将向量a和向量b的起点放在一起,那么这两个向量终点之间的向量即为 a-b

    而根据余弦定理,有:
    ∥ a ⃗ − b ⃗ ∥ 2 = ∥ a ⃗ ∥ 2 + ∥ b ⃗ ∥ 2 − 2 ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ \left \| \vec{a} -\vec{b} \right \|^2=\left \| \vec{a} \right \|^2 +\left \| \vec{b} \right \|^2 -2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta a b 2=a 2+b 22a b cosθ
    写成分量的形式,就是:
    ( ( x a , y a , z a ) − ( x b , y b , z b ) ) 2 = ( x a , y a , z a ) 2 + ( x b , y b , z b ) 2 − 2 ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ ((x_a,y_a,z_a)-(x_b,y_b,z_b))^2=(x_a,y_a,z_a)^2+(x_b,y_b,z_b)^2-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta ((xa,ya,za)(xb,yb,zb))2=(xa,ya,za)2+(xb,yb,zb)22a b cosθ

    向量相减即各分量相减,即:
    ( x a − x b , y a − y b , z a − z b ) 2 = ( x a , y a , z a ) 2 + ( x b , y b , z b ) 2 − 2 ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ (x_a-x_b,y_a-y_b,z_a-z_b)^2=(x_a,y_a,z_a)^2+(x_b,y_b,z_b)^2-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta (xaxb,yayb,zazb)2=(xa,ya,za)2+(xb,yb,zb)22a b cosθ

    将平方的运算展开:
    x a 2 + x b 2 − 2 x a x b + y a 2 + y b 2 − 2 y a y b + z a 2 + z b 2 − 2 z a z b = x a 2 + x b 2 + y a 2 + y b 2 + z a 2 + z b 2 − 2 ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ x_a^2+x_b^2-2x_ax_b+y_a^2+y_b^2-2y_ay_b+z_a^2+z_b^2-2z_az_b=x_a^2+x_b^2+y_a^2+y_b^2+z_a^2+z_b^2-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta xa2+xb22xaxb+ya2+yb22yayb+za2+zb22zazb=xa2+xb2+ya2+yb2+za2+zb22a b cosθ

    去掉等式两边重复项可得:
    − 2 x a x b − 2 y a y b − 2 z a z b = − 2 ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ -2x_ax_b-2y_ay_b-2z_az_b=-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta 2xaxb2yayb2zazb=2a b cosθ

    约去-2得:
    x a x b + y a y b + z a z b = ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ x_ax_b+y_ay_b+z_az_b=\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta xaxb+yayb+zazb=a b cosθ

    结合向量点乘的定义,则最后可知:
    a ⃗ ⋅ b ⃗ = x a x b + y a y b + z a z b = ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ \begin{aligned} \vec{a}\cdot\vec{b} & =x_ax_b+y_ay_b+z_az_b \\ & =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta \\ \end{aligned} a b =xaxb+yayb+zazb=a b cosθ

    4. 证明:向量叉乘的几何意义——结果与原先两个向量都垂直

    向量叉乘的定义如下:
    a ⃗ × b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) \vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) a ×b =(yazbzayb,zaxbxazb,xaybyaxb)

    由前面证明的向量点乘的几何意义可知,
    如果能证明:

    ( a ⃗ × b ⃗ ) ⋅ a ⃗ = 0 (\vec{a}\times\vec{b} )\cdot \vec{a}=0 (a ×b )a =0

    ( a ⃗ × b ⃗ ) ⋅ b ⃗ = 0 (\vec{a}\times\vec{b} )\cdot \vec{b}=0 (a ×b )b =0

    则意味着向量叉乘的结果向量,和原先两个向量的夹角的余弦值都为0,即夹角为90°,即与原先两个向量都垂直


    而这个证明可以直接从算式中得出:
    ( a ⃗ × b ⃗ ) ⋅ a ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) ⋅ ( x a , y a , z a ) = y a z b x a − z a y b x a + z a x b y a − x a z b y a + x a y b z a − y a x b z a = ( y a z b x a − x a z b y a ) + ( x a y b z a − z a y b x a ) + ( z a x b y a − y a x b z a ) = 0 + 0 + 0 = 0 \begin{aligned} (\vec{a}\times\vec{b} )\cdot \vec{a} & = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) \cdot (x_a,y_a,z_a) \\ & =y_az_bx_a-z_ay_bx_a+z_ax_by_a-x_az_by_a+x_ay_bz_a-y_ax_bz_a\\ & =(y_az_bx_a-x_az_by_a)+(x_ay_bz_a-z_ay_bx_a)+(z_ax_by_a-y_ax_bz_a)\\ & =0+0+0\\ & =0\\ \end{aligned} (a ×b )a =(yazbzayb,zaxbxazb,xaybyaxb)(xa,ya,za)=yazbxazaybxa+zaxbyaxazbya+xaybzayaxbza=(yazbxaxazbya)+(xaybzazaybxa)+(zaxbyayaxbza)=0+0+0=0

    ( a ⃗ × b ⃗ ) ⋅ b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) ⋅ ( x b , y b , z b ) = y a z b x b − z a y b x b + z a x b y b − x a z b y b + x a y b z b − y a x b z b = ( y a z b x b − y a x b z b ) + ( z a x b y b − z a y b x b ) + ( x a y b z b − x a z b y b ) = 0 + 0 + 0 = 0 \begin{aligned} (\vec{a}\times\vec{b} )\cdot \vec{b} & = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) \cdot (x_b,y_b,z_b) \\ & =y_az_bx_b-z_ay_bx_b+z_ax_by_b-x_az_by_b+x_ay_bz_b-y_ax_bz_b\\ & =(y_az_bx_b-y_ax_bz_b)+(z_ax_by_b-z_ay_bx_b)+(x_ay_bz_b-x_az_by_b)\\ & =0+0+0\\ & =0\\ \end{aligned} (a ×b )b =(yazbzayb,zaxbxazb,xaybyaxb)(xb,yb,zb)=yazbxbzaybxb+zaxbybxazbyb+xaybzbyaxbzb=(yazbxbyaxbzb)+(zaxbybzaybxb)+(xaybzbxazbyb)=0+0+0=0

    5. 证明:向量叉乘的几何意义——结果的模为原先两向量的模相乘再乘夹角正弦

    向量叉乘的定义如下:
    a ⃗ × b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) \vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) a ×b =(yazbzayb,zaxbxazb,xaybyaxb)

    现在想证明的是:(其中θ为两向量夹角)
    ∥ a ⃗ × b ⃗ ∥ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ s i n θ \left \|\vec{a}\times\vec{b}\right \| =\left \| \vec{a} \right \|\left \| \vec{b} \right \|sin\theta a ×b =a b sinθ


    (方法来自于《3D游戏与计算机图形学中的数学方法》)

    取向量叉乘结果的平方,逐步展开:
    ∥ a ⃗ × b ⃗ ∥ 2 = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) 2 = ( y a z b − z a y b ) 2 + ( z a x b − x a z b ) 2 + ( x a y b − y a x b ) 2 = ( y a 2 z b 2 + z a 2 y b 2 − 2 y a z b z a y b ) + ( z a 2 x b 2 + x a 2 z b 2 − 2 z a x b x a z b ) + ( x a 2 y b 2 + y a 2 x b 2 − 2 x a y b y a x b ) = ( y a 2 z b 2 + z a 2 y b 2 + z a 2 x b 2 + x a 2 z b 2 + x a 2 y b 2 + y a 2 x b 2 ) + ( − 2 y a z b z a y b − 2 z a x b x a z b − 2 x a y b y a x b ) \begin{aligned} \left \|\vec{a}\times\vec{b}\right \| ^2 & = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b)^2 \\ & = (y_az_b-z_ay_b)^2+(z_ax_b-x_az_b)^2+(x_ay_b-y_ax_b)^2 \\ & = (y_a^2z_b^2+z_a^2y_b^2-2y_az_bz_ay_b)+(z_a^2x_b^2+x_a^2z_b^2-2z_ax_bx_az_b)+(x_a^2y_b^2+y_a^2x_b^2-2x_ay_by_ax_b) \\ & = (y_a^2z_b^2+z_a^2y_b^2+z_a^2x_b^2+x_a^2z_b^2+x_a^2y_b^2+y_a^2x_b^2)+(-2y_az_bz_ay_b-2z_ax_bx_az_b-2x_ay_by_ax_b)\\ \end{aligned} a ×b 2=(yazbzayb,zaxbxazb,xaybyaxb)2=(yazbzayb)2+(zaxbxazb)2+(xaybyaxb)2=(ya2zb2+za2yb22yazbzayb)+(za2xb2+xa2zb22zaxbxazb)+(xa2yb2+ya2xb22xaybyaxb)=(ya2zb2+za2yb2+za2xb2+xa2zb2+xa2yb2+ya2xb2)+(2yazbzayb2zaxbxazb2xaybyaxb)

    下面便出现了我觉得这种证明方法比较“魔法”的一个操作,对于等号右侧:
    左部分先加上了 ( x a 2 x b 2 + y a 2 y b 2 + z a 2 z b 2 ) (x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2) (xa2xb2+ya2yb2+za2zb2),右部分再减去它。一番“折腾”之后,虽然结果未受影响,但是却让左部分凑出了原先两向量的模的形式,右部分凑出了向量点乘的形式,具体来看:
    ∥ a ⃗ × b ⃗ ∥ 2 = ( y a 2 z b 2 + z a 2 y b 2 + z a 2 x b 2 + x a 2 z b 2 + x a 2 y b 2 + y a 2 x b 2 ) + ( x a 2 x b 2 + y a 2 y b 2 + z a 2 z b 2 ) + ( − 2 y a z b z a y b − 2 z a x b x a z b − 2 x a y b y a x b ) − ( x a 2 x b 2 + y a 2 y b 2 + z a 2 z b 2 ) = ( y a 2 z b 2 + z a 2 y b 2 + z a 2 x b 2 + x a 2 z b 2 + x a 2 y b 2 + y a 2 x b 2 + x a 2 x b 2 + y a 2 y b 2 + z a 2 z b 2 ) − ( x a 2 x b 2 + y a 2 y b 2 + z a 2 z b 2 + 2 y a z b z a y b + 2 z a x b x a z b + 2 x a y b y a x b ) = ( x a 2 + y a 2 + z a 2 ) ( x b 2 + y b 2 + z b 2 ) − ( x a x b + y a y b + z a z b ) 2 = ∥ a ⃗ ∥ 2 ∥ b ⃗ ∥ 2 − ( a ⃗ ⋅ b ⃗ ) 2 \begin{aligned} \left \|\vec{a}\times\vec{b}\right \| ^2 & = (y_a^2z_b^2+z_a^2y_b^2+z_a^2x_b^2+x_a^2z_b^2+x_a^2y_b^2+y_a^2x_b^2)+(x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2)+(-2y_az_bz_ay_b-2z_ax_bx_az_b-2x_ay_by_ax_b)-(x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2)\\ & = (y_a^2z_b^2+z_a^2y_b^2+z_a^2x_b^2+x_a^2z_b^2+x_a^2y_b^2+y_a^2x_b^2+x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2)-(x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2+2y_az_bz_ay_b+2z_ax_bx_az_b+2x_ay_by_ax_b)\\ & = (x_a^2+y_a^2+z_a^2)(x_b^2+y_b^2+z_b^2)-(x_ax_b+y_ay_b+z_az_b)^2\\ & =\left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2-(\vec{a}\cdot\vec{b})^2\\ \end{aligned} a ×b 2=(ya2zb2+za2yb2+za2xb2+xa2zb2+xa2yb2+ya2xb2)+(xa2xb2+ya2yb2+za2zb2)+(2yazbzayb2zaxbxazb2xaybyaxb)(xa2xb2+ya2yb2+za2zb2)=(ya2zb2+za2yb2+za2xb2+xa2zb2+xa2yb2+ya2xb2+xa2xb2+ya2yb2+za2zb2)(xa2xb2+ya2yb2+za2zb2+2yazbzayb+2zaxbxazb+2xaybyaxb)=(xa2+ya2+za2)(xb2+yb2+zb2)(xaxb+yayb+zazb)2=a 2b 2(a b )2

    而根据前面证明的向量点乘的几何意义可知:
    a ⃗ ⋅ b ⃗ = ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ \vec{a}\cdot\vec{b} =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta a b =a b cosθ

    所以:
    ∥ a ⃗ × b ⃗ ∥ 2 = ∥ a ⃗ ∥ 2 ∥ b ⃗ ∥ 2 − ∥ a ⃗ ∥ 2 ∥ b ⃗ ∥ 2 ⋅ ( c o s θ ) 2 = ∥ a ⃗ ∥ 2 ∥ b ⃗ ∥ 2 ⋅ ( 1 − ( c o s θ ) 2 ) \begin{aligned} \left \|\vec{a}\times\vec{b}\right \| ^2 & = \left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2-\left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2\cdot (cos\theta)^2\\ & = \left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2\cdot (1- (cos\theta)^2) \end{aligned} a ×b 2=a 2b 2a 2b 2(cosθ)2=a 2b 2(1(cosθ)2)

    又因为【 ( c o s θ ) 2 + ( s i n θ ) 2 = 1 (cos\theta)^2+(sin\theta)^2=1 (cosθ)2+(sinθ)2=1 】一定成立
    所以:
    ∥ a ⃗ × b ⃗ ∥ 2 = ∥ a ⃗ ∥ 2 ∥ b ⃗ ∥ 2 ⋅ ( s i n θ ) 2 \left \|\vec{a}\times\vec{b}\right \| ^2= \left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2\cdot (sin\theta)^2 a ×b 2=a 2b 2(sinθ)2

    开方得:
    ∥ a ⃗ × b ⃗ ∥ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ ⋅ s i n θ \left \|\vec{a}\times\vec{b}\right \|= \left \| \vec{a} \right \|\left \| \vec{b} \right \|\cdot sin\theta a ×b =a b sinθ

    6. 证明:向量叉乘的几何意义——结果的模为原先两向量构成三角形的面积二倍

    在前者证明之后,此证明变得很容易,因为:

    ∥ b ⃗ ∥ ⋅ s i n θ \left \| \vec{b} \right \|\cdot sin\theta b sinθ 的长度就是以a为底边的三角形的高度:

    在这里插入图片描述
    所以:
    ∥ a ⃗ × b ⃗ ∥ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ ⋅ s i n θ = ( ∥ a ⃗ ∥ ) × ( ∥ b ⃗ ∥ ⋅ s i n θ ) = 底 × 高 = 2 × ( 底 × 高 2 ) = 2 × S 三 角 形 \begin{aligned} \left \|\vec{a}\times\vec{b}\right \| & = \left \| \vec{a} \right \|\left \| \vec{b} \right \|\cdot sin\theta\\ & = (\left \| \vec{a} \right \|)\times (\left \| \vec{b} \right \|\cdot sin\theta)\\ & = 底 \times 高\\ & = 2\times (\frac{底 \times 高}{2})\\ & = 2\times S_{三角形} \end{aligned} a ×b =a b sinθ=(a )×(b sinθ)=×=2×(2×)=2×S

    总结

    向量点乘

    定义

    a ⃗ ⋅ b ⃗ = x a x b + y a y b + z a z b \vec{a}\cdot\vec{b} = x_ax_b+y_ay_b+z_az_b a b =xaxb+yayb+zazb

    几何意义与作用举例

    a ⃗ ⋅ b ⃗ = ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ \vec{a}\cdot\vec{b} =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta a b =a b cosθ

    • 可以算出向量的夹角
    • 可以直接根据此值判断两向量方向的关系:-1~ 0 ~1对应于相反 ~ 垂直 ~ 相同

    向量叉乘

    定义

    a ⃗ × b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) \vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) a ×b =(yazbzayb,zaxbxazb,xaybyaxb)

    几何意义与作用举例1

    结果的向量与原先两个向量都垂直

    • 可以用来快速算出两个向量确定的一个平面的法向量方向。
    几何意义与作用举例2

    ∥ a ⃗ × b ⃗ ∥ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ s i n θ \left \|\vec{a}\times\vec{b}\right \| =\left \| \vec{a} \right \|\left \| \vec{b} \right \|sin\theta a ×b =a b sinθ

    • 可以用来在已知顶点位置情况下,快速算出空间内一个三角形的面积。
    展开全文
  • 向量的点乘

    2020-01-08 14:20:50
    向量的点乘 a * b 高中数学中我们可以得到公式 a * b = |a| * |b| * cos<a,b> 可以使用点乘获取两个向量的前后位置,如下图所示 案例一(案例中将y去掉,相当于俯视坐标系之后x,z): Vector3 a = ...
  • 向量点乘与叉乘

    万次阅读 多人点赞 2019-02-25 14:06:01
    向量点乘与叉乘 向量(Vector)  在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向和一个数(长度)。在二维空间中,一个向量可以用一对x和y来表示。例如由点(1,3)到(5,1的向量...
  • Matlab点乘

    2021-06-19 11:51:42
    两个向量对应元素相乘,要使用 .* 或 .^
  • 向量点乘和叉乘

    千次阅读 2021-05-29 20:46:30
    title: 向量点乘和叉乘 categories: Math tags: Math Knowledge 向量点乘和叉乘 假设存在向量a和向量b:$ a=[a_{1},a_{2},a_{3}],b=[b_{1},b_{2},b_{3}] $ 点乘 向量a和向量b的点乘公式如下: $ a\bullet b=a_{1}...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,286
精华内容 10,114
关键字:

点乘