当前位置:   article > 正文

几何向量:向量乘法(点乘)_一个点能乘以一个向量吗

一个点能乘以一个向量吗

紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79415781

上一篇讲了向量的加减分配等计算,那么紧接着就是应该来讲乘除了吧,我们知道普通数值都有加减乘除开方等等计算,比如:

10x10 = 100  

10÷10 = 1

那么向量AxB = ?  A÷B = ? 

我们知道向量其实是多个数值分量组成的一个集合,那么向量相乘又怎么处理呢?是分量相乘再相加,还是分量相加再相乘?

然后就算给一个向量相乘的规范,那有什么意义呢?能解决什么实际问题?

这里我们从物理上来考虑向量相乘的问题:

这里不得不提一个做功的概念,物理上,我们求力F使物体位移S所做的功W


ps:物理上为什么做功的概念是w = f*s*cosθ,其实是有一个积分推导过程的,百度词条上有推导过程,这里我们暂时不做讨论,等我们图形学所需的数学知识完善后,再去讨论一些后面的物理意义。

这里做功的计算结果,数学上我们称为向量的内积(点积),从第二幅图可以认为向量A和B的内积,等于A在B上的投影长度标量乘B的长度标量。

当然这和计算机图形学有什么关系呢?我们这里又不是学计算机物理引擎,这里我们观察下:

看第一个公式w = Fx*Sx+Fy*Sy,咋一看就是两个平面向量A(Fx,Fy)和B(Sx,Sy)的分量的乘积的和,这个结果和第二个公式W = F*S*cosθ有什么关系呢?如下图:


上面我们通过余弦定理推出A(Xa,Ya),B(Xb,Yb)的点积可以换算成标量的处理,即:

W = |A|*|B|*cosθ = Xa*Xb+Ya*Yb

上面我们就把向量的点积转换成标量的处理了。

既然我们已经推导了平面二维向量的点积,那么接下来推导三维向量的点积。

向量A(Xa,Ya,Za),B(Xb,Yb,Zb)的点积


可以推出:A(Xa,Ya,Za)·B(Xb,Yb,Zb) = Xa*Xb + Ya*Yb + Za*Zb。

接下来程序验证一下:


  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class DotMathFunc : MonoBehaviour {
  5. public Transform aHead;
  6. public Transform aTail;
  7. public Transform bHead;
  8. public Transform bTail;
  9. void Start () {
  10. Vector3 A = aTail.position - aHead.position;
  11. Vector3 B = bTail.position - bHead.position;
  12. //用推导公式计算
  13. float dotAB = A.x * B.x + A.y * B.y + A.z * B.z;
  14. //用api计算
  15. float apidotAB = Vector3.Dot(A, B);
  16. #if UNITY_EDITOR
  17. Debug.LogFormat("dotAB = {0} apidotAB = {1}", dotAB, apidotAB);
  18. #endif
  19. }
  20. }

以上就是向量点积的理解推导过程

点积呢,在图形学中具体的应用,判断向量夹角,如果点击为0就是垂直角,为正数就是锐角,为负数就是钝角,这应该很好理解,通过A到B的投影A'就能得出

第二就是换算反射reflect函数,在光线反射中会起到很大作用,后面我们会讲


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/86887
推荐阅读
相关标签
  

闽ICP备14008679号