向量点乘
点乘结果是一个标量,并满足交换律
向量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, 如果三个向量叉乘的结果向量方向相同表示在内,否则在外