向量点积与叉积等几何的定义及应用研究
2016-11-21 17:45
183 查看
要计算两个向量的点积,需要将两个向量的对应分量相乘,然后再将乘积相加。下面这段代码可以计算出两个二维向量的点积:
一,向量点积与叉积的定义
向量的点积:
假设向量u(ux, uy)和v(vx, vy),u和v之间的夹角为α,从三角形的边角关系等式出发,可作出如下简单推导:
|u - v||u - v| = |u||u| + |v||v| - 2|u||v|cosα
===>
(ux - vx)2 + (uy - vy)2 = ux2 + uy2 +vx2+vy2-
2|u||v|cosα
===>
-2uxvx - 2uyvy = -2|u||v|cosα
===>
cosα = (uxvx + uyvy) / (|u||v|)
这样,就可以根据向量u和v的坐标值计算出它们之间的夹角。
定义u和v的点积运算: u . v = (uxvx + uyvy),
上面的cosα可简写成: cosα = u . v / (|u||v|)
当u . v = 0时(即uxvx + uyvy = 0),向量u和v垂直;当u . v >
0时,u和v之间的夹角为锐角;当u . v < 0时,u和v之间的夹角为钝角。
可以将运算从2维推广到3维。
两个单位向量的点积得到两个向量的夹角的cos值,通过它可以知道两个向量的相似性,利用点积可判断一个多边形是否面向摄像机还是背向摄像机。
向量的叉积:
假设存在向量u(ux, uy, uz), v(vx, vy, vz), 求同时垂直于向量u, v的向量w(wx, wy, wz).
因为w与u垂直,同时w与v垂直,所以w . u = 0, w . v = 0; 即
uxwx + uywy + uzwz = 0;
vxwx + vywy + vzwz = 0;
分别削去方程组的wy和wx变量的系数,得到如下两个等价方程式:
(uxvy - uyvx)wx = (uyvz - uzvy)wz
(uxvy - uyvx)wy = (uzvx - uxvz)wz
于是向量w的一般解形式为:
w = (wx, wy, wz) = ((uyvz - uzvy)wz /
(uxvy - uyvx), (uzvx - uxvz)wz /
(uxvy - uyvx), wz)
= (wz / (uxvy - uyvx) * (uyvz - uzvy, uzvx - uxvz, uxvy - uyvx))
因为:
ux(uyvz - uzvy) + uy(uzvx - uxvz)
+ uz(uxvy - uyvx)
= uxuyvz - uxuzvy + uyuzvx - uyuxvz + uzuxvy - uzuyvx
= (uxuyvz - uyuxvz) + (uyuzvx - uzuyvx)
+ (uzuxvy - uxuzvy)
= 0 + 0 + 0 = 0
vx(uyvz - uzvy) + vy(uzvx - uxvz)
+ vz(uxvy - uyvx)
= vxuyvz - vxuzvy + vyuzvx - vyuxvz + vzuxvy - vzuyvx
= (vxuyvz - vzuyvx) + (vyuzvx - vxuzvy)
+ (vzuxvy - vyuxvz)
= 0 + 0 + 0 = 0
由此可知,向量(uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)是同时垂直于向量u和v的。
为此,定义向量u = (ux, uy, uz)和向量 v = (vx, vy, vz)的叉积运算为:u x v =
(uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)
上面计算的结果可简单概括为:向量u x v垂直于向量u和v。
根据叉积的定义,沿x坐标轴的向量i = (1, 0, 0)和沿y坐标轴的向量j = (0, 1, 0)的叉积为:
i x j = (1, 0, 0) x (0, 1, 0) = (0 * 0 - 0 * 1, 0 * 0 - 1 * 0, 1 * 1 - 0 * 0) = (0, 0, 1) = k
同理可计算j x k:
j x k = (0, 1, 0) x (0, 0, 1) = (1 * 1 - 0 * 0, 0 * 0 - 0 * 1, 0 * 0 - 0 * 0) = (1, 0, 0) = i
以及k x i:
k x i = (0, 0, 1) x (1, 0, 0) = (0 * 0 - 1 * 0, 1 * 1 - 0 * 0, 0 * 0 - 0 * 0) = (0, 1, 0) = j
由叉积的定义,可知:
v x u = (vyuz - vzuy, vzux - vxuz, vxuy - vyux)
= - (u x v)
var dotProduct = vectorOne.x * vectorTwo.x +vectorOne.y * vectorTwo.y;计算两个向量之间的点积是很简单的,不过,这个点积的意义理解起来可就有些不太直观了。首先请注意,与两个向量的加减法运算结果不同,点积不是向量。专业人员把这种值叫做“标量”(scalar,也叫“纯量”),就是说,它仅仅是个数字而已。
一,向量点积与叉积的定义
向量的点积:
假设向量u(ux, uy)和v(vx, vy),u和v之间的夹角为α,从三角形的边角关系等式出发,可作出如下简单推导:
|u - v||u - v| = |u||u| + |v||v| - 2|u||v|cosα
===>
(ux - vx)2 + (uy - vy)2 = ux2 + uy2 +vx2+vy2-
2|u||v|cosα
===>
-2uxvx - 2uyvy = -2|u||v|cosα
===>
cosα = (uxvx + uyvy) / (|u||v|)
这样,就可以根据向量u和v的坐标值计算出它们之间的夹角。
定义u和v的点积运算: u . v = (uxvx + uyvy),
上面的cosα可简写成: cosα = u . v / (|u||v|)
当u . v = 0时(即uxvx + uyvy = 0),向量u和v垂直;当u . v >
0时,u和v之间的夹角为锐角;当u . v < 0时,u和v之间的夹角为钝角。
可以将运算从2维推广到3维。
两个单位向量的点积得到两个向量的夹角的cos值,通过它可以知道两个向量的相似性,利用点积可判断一个多边形是否面向摄像机还是背向摄像机。
向量的叉积:
假设存在向量u(ux, uy, uz), v(vx, vy, vz), 求同时垂直于向量u, v的向量w(wx, wy, wz).
因为w与u垂直,同时w与v垂直,所以w . u = 0, w . v = 0; 即
uxwx + uywy + uzwz = 0;
vxwx + vywy + vzwz = 0;
分别削去方程组的wy和wx变量的系数,得到如下两个等价方程式:
(uxvy - uyvx)wx = (uyvz - uzvy)wz
(uxvy - uyvx)wy = (uzvx - uxvz)wz
于是向量w的一般解形式为:
w = (wx, wy, wz) = ((uyvz - uzvy)wz /
(uxvy - uyvx), (uzvx - uxvz)wz /
(uxvy - uyvx), wz)
= (wz / (uxvy - uyvx) * (uyvz - uzvy, uzvx - uxvz, uxvy - uyvx))
因为:
ux(uyvz - uzvy) + uy(uzvx - uxvz)
+ uz(uxvy - uyvx)
= uxuyvz - uxuzvy + uyuzvx - uyuxvz + uzuxvy - uzuyvx
= (uxuyvz - uyuxvz) + (uyuzvx - uzuyvx)
+ (uzuxvy - uxuzvy)
= 0 + 0 + 0 = 0
vx(uyvz - uzvy) + vy(uzvx - uxvz)
+ vz(uxvy - uyvx)
= vxuyvz - vxuzvy + vyuzvx - vyuxvz + vzuxvy - vzuyvx
= (vxuyvz - vzuyvx) + (vyuzvx - vxuzvy)
+ (vzuxvy - vyuxvz)
= 0 + 0 + 0 = 0
由此可知,向量(uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)是同时垂直于向量u和v的。
为此,定义向量u = (ux, uy, uz)和向量 v = (vx, vy, vz)的叉积运算为:u x v =
(uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)
上面计算的结果可简单概括为:向量u x v垂直于向量u和v。
根据叉积的定义,沿x坐标轴的向量i = (1, 0, 0)和沿y坐标轴的向量j = (0, 1, 0)的叉积为:
i x j = (1, 0, 0) x (0, 1, 0) = (0 * 0 - 0 * 1, 0 * 0 - 1 * 0, 1 * 1 - 0 * 0) = (0, 0, 1) = k
同理可计算j x k:
j x k = (0, 1, 0) x (0, 0, 1) = (1 * 1 - 0 * 0, 0 * 0 - 0 * 1, 0 * 0 - 0 * 0) = (1, 0, 0) = i
以及k x i:
k x i = (0, 0, 1) x (1, 0, 0) = (0 * 0 - 1 * 0, 1 * 1 - 0 * 0, 0 * 0 - 0 * 0) = (0, 1, 0) = j
由叉积的定义,可知:
v x u = (vyuz - vzuy, vzux - vxuz, vxuy - vyux)
= - (u x v)
相关文章推荐
- 向量点积与叉积等几何的定义及应用
- 向量点积与叉积的定义及应用
- 向量点积与叉积的定义及应用
- 转《向量点积与叉积的定义及应用》
- 计算几何基础——【点积和叉积的用处】
- 计算几何算法基础————判断点是否在线段上(另附叉积的重要应用,折线段的拐向判断)
- 计算几何--矢量和叉积
- C语言平面几何1-数据类型的定义
- poj 2398 Toy Storage(计算几何:叉积)
- 向量的叉积和点积的 几何意义 有关于投影的推导(和点积的关系)
- CGGeometry类定义几何元素的结构和操作几何元素的函数。
- 2D向量的叉积的几何意义
- 计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)
- (计算几何POJ step 8.1.1.2)POJ 1654 Area(使用叉积来计算多边形面积)
- Pipe--计算几何叉积的应用
- FZU 2148(计算几何)叉积模板
- poj 1408 Fishnet (几何:线段相交 + 叉积 求面积 )
- Poj 2318 toys (计算几何,叉积)
- POJ3304---Segments (基础计算几何:叉积判断线段相交)
- [POJ2318]TOYS(计算几何-叉积+二分)