几何向量(2):向量乘法(点乘)

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


10x10 = 100  


10÷10 = 1


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


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


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


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


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

image.png

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θ有什么关系呢?如下图:

image.png

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


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


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


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


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

image.png

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

接下来程序验证一下:

image.png

public class DotMathFunc : MonoBehaviour {
 
    public Transform aHead;
    public Transform aTail;
    public Transform bHead;
    public Transform bTail;
 
	void Start () {
        Vector3 A = aTail.position - aHead.position;
        Vector3 B = bTail.position - bHead.position;
         //用推导公式计算
        float dotAB = A.x * B.x + A.y * B.y + A.z * B.z;
 
        //用api计算
        float apidotAB = Vector3.Dot(A, B);
#if UNITY_EDITOR
        Debug.LogFormat("dotAB = {0} apidotAB = {1}", dotAB, apidotAB);
#endif
    }
	
	
}

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

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

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


点积的计算也可以参考netMarketing类中Vectec类、Vector3类的例子,如下:

 [netMarketing类库] Vectec类、Vector3类: 平面向量、空间向量类


————————————————

版权声明:本文为CSDN博主「羊羊2035」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yinhun2012/article/details/79425674


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864