【数学】向量

【数学】向量

向量的运算

点乘

输入两个向量,输出一个标量。又称作标量积,内积。

定义

  • 几何定义:ab=|a||b|cos(θ)
  • 代数定义:ab=i=1naibi=a1b1+a2b2++anbn

意义

  • dot(a,b) > 0 :a 和 b 同向,即夹角为 0-90。
  • dot(a,b) = 0 :a 和 b 相互垂直。
  • dot(a,b) < 0 :a 和 b 反向,即夹角为 90-180。

性质

  • 满足交换律:ab=ba
  • 满足加法分配律:a(b+c)=ab+ac
  • 乘以标量时满足:(c1a)(c2b)=(c1c2)(ab)

变形

  • vv=|v|2

    vv=vx2+vy2+vz2=vx2+vy2+vz22=|v|2

叉乘

输入两个向量,输出一个向量。又称作外积,向量积。

定义

  • 几何定义:

    a×b=|a||b|sin(θ)n

    θa,bna,b

  • 代数定义:

    a×b=|xyzaxayazbxbybz|=x(1)1+1|ayazbybz|+y(1)1+2|axazbxbz|+z(1)1+3|axaybxby|=x(aybzazby)y(axbzazbx)+z(axbyaybx)

    x,y,z

意义

  • 计算与 a 和 b 相垂直向量 c。
  • c 的模长等于以 a,b 为临边的四边形面积。
  • 伸出手,掌心对准 a 和 b 的夹角,手掌应能通过弯曲模拟 a 旋转到 b 的状态,此时大拇指为旋转轴,同时也便是叉乘出的新向量 c。

性质

  • 反交换律:a×b=b×a
  • 乘以标量时满足:(ra)×b=a×(rb)=r(a×b)

夹角

给定任意两个向量 ab 求其夹角:

angle(a,b)=arccos(|a||b|cos(θ)|a||b|)=arccos(dot(a,b)|a||b|)

投影

v 是待投影的向量,n 是投影到的法线,则:

project(v,n)=n|n||v|cos(θ)=n|n|dot(v,n)|n|

特别当 n 为单位向量时:

project(v,n)=ndot(v,n)

旋转

给定向量 vn 为旋转轴转 θ 度,求旋转后新向量:

v=project(v,n)v=vvrotate(v,n,θ)=vcos(θ)+cross(n,v)sin(θ)+v

基本原理是将 v 拆解成两个向量旋转的复合:一个平行旋转轴故无需旋转;一个与旋转轴垂直,可借助叉乘构建二维旋转坐标系,利用三角函数轻松求出旋转后的向量;

反射

给定向量 vn 为反射法线,则反射后的新向量为:

reflect(v,b)=v2dot(v,n)n

可以简单想象成将入射向量的反向量投影在法线上并乘二,再加上入射向量得到的就是出射向量了。

推导过程

alt text

以上图为例即求出 OB 的值,AOOP的方向(后续简称 n ) 分别为入射角和法线。

OB=ABAO=2APAO=2(AO+OP)AO=AO+2OP=AO+2project(OA,n)=AO+2dot(AO,n)n=v2dot(v,n)n

posted @   BDFFZI  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示