精华内容
下载资源
问答
  • 向量点乘和叉乘

    2021-05-02 10:56:12
    点乘和叉乘在unity中有广泛的应用:结论点乘判断角度,叉乘判断朝向方位。点乘:结果为一个常数又称"点积","数量积”,“内积”(Dot Product, 用*)对于向量 A = (x1, y1, z1) ,向量 B = (x2, y2, z2),则向量A点乘...

    点乘和叉乘在unity中有广泛的应用:结论点乘判断角度,叉乘判断朝向方位。

    点乘:结果为一个常数

    又称"点积","数量积”,“内积”(Dot Product, 用*)

    对于向量 A = (x1, y1, z1) ,向量 B = (x2, y2, z2),

    则向量A点乘向量 B:

    A·B = x1 * x2 + y1 * y2 + z1 * z2

    同时有

    A·B = |A||B|Cosθ

    由以上两公式可见,向量的点乘结果为一个标量,即一个数值。

    因为夹角θ<=180°,所以配合余弦曲线可以直观地判断出:

    当向量 A·B > 0 时,θ < 90° ;

    当向量 A·B < 0 时,θ > 90° ;

    当向量 A·B = 0 时,θ = 90° ;

    向量点乘符合乘法交换律,即:A·B = B·A

    Unity项目应用:

    1.根据点乘计算两个向量的夹角。θ = arccos(A·B / |A||B|)

    2.根据点乘的正负值,得到夹角大小范围,>0,则夹角(0,90)<0,则夹角(90,180),可以利用这点判断一个多边形是面向摄像机还是背向摄像机。

    3.根据点乘的大小,得到向量的投影长度,反应了向量的长度关系。

    4.利用点积可判断一个多边形是否面向摄像机还是背向摄像机。向量的点积与它们夹角的余弦成正比,因此在聚光灯的效果计算中,可以根据点积来得到光照效果,如果点积越大,说明夹角越小,则物理离光照的轴线越近,光照越强。计算机图形学常用来进行方向性判断,如两矢量点积大于0,则它们的方向朝向相近;如果小于0,则方向相反。

    叉乘:结果为一个向量

    (又称"叉积",“向量积”,“外积”)(cross product,用x)

    定义:C = A x B,其中A B C 均为向量

    c64302c0dc3cfba5ac49c6e2e4bf5f71.png

    几何意义是:得到一个与这两个向量都垂直的向量,这个向量的模是以两个向量为边的平行四边形的面积。AxB = |A||B|Sinθ,这个值即就是垂直于A和B组成的平面的向量C的模长!

    如果是二维计算:v1( x1, y1)x v2( x2, y2)= x1 * y2 - x2 * y1

    7d82c28b5d41a04d05f00e05e88098e4.png

    v1和v2向量的叉乘运算:相应元素的乘积的和:v1( x1, y1,z1) x v2(x2, y2, z2) = (y1z2 - y2z1)i+(x2z1 - x1z2)j+(x1y2-x2y1)k;

    利用三阶行列式计算

    |i j k|

    |x1 y1 z1|

    |x2 y2 z2|

    叉乘的右手定则是用来确定叉乘积的方向的。

    右手法则:右手的四指方向指向第一个矢量,屈向叉乘矢量的夹角方向(两个矢量夹角方向取小于180°的方向),那么此时大拇指方向就是叉乘所得的叉乘矢量的方向.(大拇指应与食指成九十度)(注意:Unity当中使用左手,因为Unity使用的是左手坐标系)

    dc405d456db41346942b97b522e73a3a.png

    数学上叉乘的右手法则

    e9ca964e58142f1eb1231d86e9342936.png

    叉积的作用:

    叉积时一个非常重要的性质是可以通过它的符号判断两向量相互之间的顺逆时针关系:

    若P×Q > 0 , 则P在Q的顺时针方向;

    若P×Q < 0 , 则P在Q的逆时针方向;

    若P×Q = 0 , P与Q共线,可能是同向也可能是反向;

    Unity当中叉乘的左手法则,Unity项目应用:

    1.根据叉乘得到a,b向量的相对位置,和顺时针或逆时针方位。

    简单的说: 点乘判断角度,叉乘判断方向。

    形象的说: 当一个敌人在你身后的时候,叉乘可以判断你是往左转还是往右转更好的转向敌人,点乘得到你当前的面朝向的方向和你到敌人的方向的所成的角度大小。

    2.得到a,b夹角的正弦值,计算向量的夹角(0,90),可以配合点乘和Angle方法计算出含正负的方向。

    3.根据叉乘大小,得到a,b向量所形成的平行四边形的面积大小,根据面积大小得到向量的相对大小。

    4.如何判断一个点是否在一个矩形内?

    5fb58b45d4e1475459964e221716cf04.png

    只要判断(AE X AB ) * ( CE X CD) >= 0 就说明E在AB,CD中间夹着,同理计算另两边DA和BC就可以了。(AE X AB )>0,即说明AE在AB的顺时针方向,也就是说点E在AB的下方,同理可知点E在CD的上方。然后在判断AD和CB与点E的关系。

    // 计算 |p1 p2| X |p1 p|

    float GetCross(Vector2 p1, Vector2 p2, Vector2 p)

    {

    return (p2.x - p1.x) * (p.y - p1.y) - (p.x - p1.x) * (p2.y - p1.y);

    }

    //判断点p是否在p1p2p3p4的正方形内

    bool IsPointInMatrix(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 p)

    {

    var isPointIn = GetCross(p1, p2, p) * GetCross(p3, p4, p) >= 0 && GetCross(p2, p3, p) * GetCross(p4, p1, p) >= 0;

    return isPointIn;

    }

    类似于判断一个点是否在一个三角形内?

    点在三角形内?

    unity中的验证看这里:unity验证

    展开全文
  • 向量点乘和叉乘区别

    千次阅读 2020-09-09 19:48:11
    首先明显的区别在于:两个向量点乘的结果是一个标量,而两个向量叉乘的结果则还是一个向量。如下面的例子: 点乘: 向量a = (a1, a2, a3), 是一个1行3列的向量。向量b=(b1, 是一个3行1列的向量。两者点乘的结果为 ...

    如何看待向量之间的叉乘和点乘

    首先明显的区别在于:两个向量点乘的结果是一个标量,而两个向量叉乘的结果则还是一个向量。如下面的例子:

    点乘:

    向量a = (a1, a2, a3), 是一个1行3列的向量。向量b=(b1, 是一个3行1列的向量。两者点乘的结果为 a1b1+a2b2+a3b3(若我们这里

                                                                                      b2,

                                                                                      b3)

    将a1,a2,a3,b1,b2,b3全部赋值为1,那么向量a 点乘 向量b = 1 + 1 + 1 = 3,是一个标量

     

    叉乘:

    向量a = (a1, a2, a3), 是一个1行3列的向量。向量b=(b1, b2, b3)同样是一个1行3列的向量。两者叉乘的结果如下:

    向量a 叉乘 向量b =

    解上面的行列式可以得到:向量a 叉乘 向量b = (a2*b3-a3*b2)i + (a3*b1-a1*b3)j + (a1*b2 - a2*b1)k,这里的i = (1,0,0),j=(0,1,0), k=(0,0,1), 所以最后向量a 叉乘 向量b = (a2*b3-a3*b2,a3*b1-a1*b3,a1*b2 - a2*b1),是一个向量

    展开全文
  • 对于游戏行业程序员来说,向量点乘叉乘”是非常熟悉的运算。从代码上看他们很简单:(以下代码选自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θ

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

    千次阅读 2021-03-07 10:36:29
    点乘和叉乘区别点乘向量的内积,叉乘向量的外积。点乘点乘的结果是一个实数a·b=|a|·|b|·cos叉乘叉乘的结果是一个向量几何意义点乘的几何意义可以用来表征或计算两个向量之间的夹角,以及在b向量在...

    向量的点乘和叉乘2019-12-09 15:46:24文/董月

    点乘,也叫数量积。结果是一个向量在另一个向量方向上投影的长度,是一个标量。叉乘,也叫向量积。结果是一个和已有两个向量都垂直的向量。

    be438d93dac4baca33df63535b43f62b.png

    点乘和叉乘的区别

    点乘是向量的内积,叉乘是向量的外积。

    点乘:点乘的结果是一个实数a·b=|a|·|b|·cos

    叉乘:叉乘的结果是一个向量

    几何意义

    点乘的几何意义

    可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影。

    叉乘的几何意义

    在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。

    在3D图像学中,叉乘的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。

    叉乘和点乘的运算法则

    点乘

    点乘,也叫向量的内积、数量积。顾名思义,求下来的结果是一个数。

    向量a·向量b=|a||b|cos

    在物理学中,已知力与位移求功,实际上就是求向量F与向量s的内积,即要用点乘。

    叉乘

    叉乘,也叫向量的外积、向量积。顾名思义,求下来的结果是一个向量,记这个向量为c。

    |向量c|=|向量a×向量b|=|a||b|sin

    向量c的方向与a,b所在的平面垂直,且方向要用“右手法则”判断(用右手的四指先表示向量a的方向,然后手指朝着手心的方向摆动到向量b的方向,大拇指所指的方向就是向量c的方向)。

    因此向量的外积不遵守乘法交换率,因为向量a×向量b=-向量b×向量a在物理学中,已知力与力臂求力矩,就是向量的外积,即叉乘。

    展开全文
  • 向量点乘叉乘

    万次阅读 多人点赞 2019-02-25 14:06:01
    向量点乘叉乘 向量(Vector)  在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向一个数(长度)。在二维空间中,一个向量可以用一对xy来表示。例如由点(1,3)到(5,1的向量...
  • 向量:u=(u1,u2,u3) v=(v1,v2,v3)叉积公式:u x v = { u2v3-v2u3 , u3v1-v3u1 , u1v2-u2v1 }点积公式:u * v = u1v1+u2v2+u3v33=lul*lvl*COS(U,V)对于向量的运算,还有两个“乘法”,那就是点乘和叉乘了。点乘的结果...
  • 比如敌人再附近,点乘可以求出玩家面朝方向敌人方向的夹角,叉乘可以得出左转还是右转更好的转向敌人 Part 1 点乘: 数学上的 点乘为 a * b = |a| * |b| * cos(Θ) Unity中的点乘也是如此 点乘结果为 ...
  • 一、运算结果不同:叉乘运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。点乘,也叫数量积。结果是一个向量在另一个向量方向上投影的长度,是一个标量。二、应用不同:1、点乘:平面向量...
  • 向量点乘:a*b公式:a*b= |a| * |b| * cosθ点乘又叫向量的内积、数量积,是一个向量和它在另一个向量上的投影的长度的乘积;是标量。点乘反映着两个向量的“相似度”,两个向量越“相似”,它们的点乘越大。向量的...
  • 你讲获得向量点乘叉乘、矩阵乘法np.dot的技能
  • Unity中点乘和叉乘点乘(API: Vector3.Dot())点乘的计算公式点乘的几何意义用途之一:判断一个物体当前方位利用点乘求出角度叉乘(API: Vector3.Cross())叉乘计算公式叉乘的几何意义判断物体是在左侧还是右侧 点乘...
  • 简单介绍向量点乘和叉乘及其在图形学中的意义1. 向量点乘和叉乘1.1 向量点乘1.2 向量叉乘1.3 向量叉乘的意义1.3.1 判断向量左右位置1.3.2 判断点的内外位置 1. 向量点乘和叉乘 1.1 向量点乘 向量点乘公式 : 点乘...
  • 今天小编就为大家分享一篇pytorch点乘叉乘示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 向量点乘叉乘

    2021-03-18 18:53:48
    简要介绍了向量点乘和叉乘
  • 向量和矩阵的点乘和叉乘

    千次阅读 2021-01-29 10:40:23
    向量 定义:向量是由N个实数组成的一...叉乘:又叫向量积、外积、叉积,叉乘向量a[x1,y1,z1]和向量b[x2,y2,z2]叉乘的运算结果是一个向量,并且两个向量的叉积与这两个向量组成的坐标平面垂直,记作axb; 计算方式:.
  • 【图形学】向量点乘和叉乘

    千次阅读 2020-12-10 11:59:29
    向量的定义包含方向一个数(长度)。在二维空间中,一个向量可以用一对xy来表示。例如由点(1,3)到(5,1的向量可以用(4,-2)来表示。这里大家要特别注意,我这样说并不代表向量定义了起点终点。向量仅仅定义...
  • 【Unity】向量点乘叉乘

    千次阅读 2017-11-20 19:17:29
    【参考原文】Unity3D之Vector3.DotVector3.Cross的使用 【参考原文】Unity3D之点乘和差乘  在Unity3D中,Vector3.Dot表示求两个向量的点积;... 简单的说,点乘判断角度,叉乘判断方向。 形象的说当一个敌
  • 向量点乘\叉乘,矩阵向量乘法

    千次阅读 2020-03-29 21:23:28
    公式:a ·b = |a| * |b| * cosθ 点乘又叫向量的内积、数量积,是一个向量和它在另一个向量上的投影的长度的乘积;是标量。 点乘反映着两个向量的“相似度”,两个向量越“相似”,它们的点乘越大。 例:若向量a=...
  • 最近看数学,今天刚好看到一点一直不清楚的事,所以就想记录下来,这次我是想介绍下关于向量叉乘和点乘的问题。分清点乘和叉乘点乘,也叫向量的内积、数量积.顾名思义,求下来的结果是一个数.向量向量b=|a||b|...
  • 点乘和叉乘区别是什么?

    千次阅读 2020-12-30 05:05:12
    向量到点乘和叉乘,给与详细解答。向量:既有方向又有大小的量通常情况下会将向量放到坐标系中,常用的是笛卡尔坐标系,向量起始点通常放到原点(注:没有固定的起点,只要方向相同,大小相等,就认为两向量是相同...
  • 向量点乘叉乘应用

    千次阅读 2021-01-13 19:27:25
    先阐述一下向量的概念公式,再结合例子去验证这些公式1、向量的模:向量的大小就是向量各分量平方的平方根。向量的模公式: 设 a = (x, y, z),|a|= sqr(x * x + y * y + z * z);对应unity中的Vector3.magnitude...
  • 点乘和叉乘运算法则

    千次阅读 2021-04-22 11:08:30
    点乘,也叫向量的内积、数量积。运算法则为向量向量b=|a||b|cos叉乘,也叫向量的外积、向量积。运算法则为|向量c|=|向量向量b|=|a||b|sin。运算法则点乘点乘,也叫向量的内积、数量积。顾名思义,求下来的结果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,814
精华内容 1,925
关键字:

向量点乘和叉乘的区别

友情链接: Sipdroid_623.rar