向量点乘 和 叉乘

向量点乘

点乘结果是一个标量,并满足交换律

向量a = (ax,ay);

向量b = (bx,by);

a . b = ax * bx + ay * by = ||a|| * ||b|| * cosA; A 为两向量的夹角。

几何意义:点乘结果描述了两个向量的“相似”程度。点乘结果越大,两向量越相近。(点乘对零向量的解释是,零向量和其它任意向量都垂直)

a . b > 0 : 0 <= A < 90 方向基本相同,说明b在a的前面

a . b = 0:  A <= 90 正交

a . b < 0: 90 < A <= 180; 方向基本相反

 

向量叉乘(仅可用于3D向量)

叉乘结果是一个向量,且不满足交换律。

a = (ax, ay, az);

b = (bx, by, bz);

a x b = (ay*bz - az*by, az*bx - ax*bz, ax*by-ay*bx);

 

a . b x c = a * (b x c); 即叉乘的优先级比点乘高

a x b = -(b x a);

(a x b) x c != a x (b x c);

几何解释:

叉乘得到的向量垂直于原来的两个向量。

|| a x b || = ||a|| ||b|| sinA   (A为两向量的夹角)

点乘对零向量的解释:它平行于任意其它向量。

当然,定义零向量平行或垂直于任意向量都是不对的,因为零向量没有方向。

 

叉乘的方向:

a x b的方向: 将a 的头连接到b 的尾,并检查a 到b是顺时针还是逆时针,能够确定axb的方向。

左手坐标系中:

a x b 顺时针,a*b 指向纸外,即我们,逆时针,a*b 指向纸内,即和我们眼睛看的方向一样。

右手坐标系相反。

在unity中的几何意义:

假设物体a的transform的forward 为向量A, 物体b的position 减去 物体a的position为向量B 

那么:点乘 A* B > 0 表示物体b在物体b的前边, A*B < 0 表示物体b 在物体A的后边

叉乘:A x B  = {x, y, z}   如果 z > 0 表示 物体B在物体A的右边, 如果z < 0 表示物体B在物体A的左边,(右手螺旋定则)

判断一个点p在一个三角形的里边还是外边,假设三角行的三个顶点是A,B,C, 依次判断向量 AB x AP 、 BC x BP 、 CA x CP, 如果三个向量叉乘的结果向量方向相同表示在内,否则在外

 

 

你可能感兴趣的:(Unity3D,图形学)