请输入您要查询的百科知识:

 

词条 矢量运算
释义

矢量之间的运算要遵循特殊的法则。矢量加法一般可用平行四边形法则。由平行四边形法则可推广至三角形法则、多边形法则或正交分解法等。矢量减法是矢量加法的逆运算,一个矢量减去另一个矢量,等于加上那个矢量的负矢量。A-B=A+(-B)。矢量的乘法。矢量和标量的乘积仍为矢量。矢量和矢量的乘积,可以构成新的标量,矢量间这样的乘积叫标积;也可构成新的矢量,矢量间这样的乘积叫矢积。例如,物理学中,功、功率等的计算是采用两个矢量的标积。W=F·S,P=F·v,物理学中,力矩、洛仑兹力等的计算是采用两个矢量的矢积。M=r×F,F=qv×B。

3D engine中用到的矢量运算详细内容:

一.两点距离

2D系统:

Point1(x1,y1),Point2(x2,y2)

距离D=sqr( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) )

3D系统:

Point 1 (x1, y1, z1) Point 2 at (x2, y2, z2).

xd = x2-x1

yd = y2-y1

zd = z2-z1

距离Distance = SquareRoot(xd*xd + yd*yd + zd*zd)

做游戏和demo永远不要去做开方:

1.用LUT查表技术(Look up Table )

2.在做碰撞检测时,误差Distance*Distance<a certain number就可以认为点相撞了

二规格化,单位化(Normalize)

先要说矢量的长度:

矢量Vector(x,y,z)

矢量长度Length(Vector)= |Vector|=sqr(x*x+y*y+z*z)

Normalize后:

(x/Length(Vector),y/Length(Vector),z/Length(Vector))

方向不变,长度为1个单位

三.点乘 点积 数量积(Dot Product)

是一回事儿.首先明确两个矢量的点积是个标量.

中学物理的力做功就是矢量点积的例子:W=|F|.|S|.cos(theta)

二矢量点积:

Vector1:(x1,y1,z1) Vector2(x2,y2,z2)

DotProduct=x1*x2+y1*y2+z1*z2

很重要的应用:

1.求二矢量余弦:

由我们最熟悉的力做功:

cos(theta)=F.S/(|F|.|S|)

可以判断二矢量的方向情况: cos=1同向,cos=-1相反,cos=0直角

曲面消隐(Cull face)时判断物体表面是否可见:(法线和视线矢量的方向问题)cos>0不可见,cos<0可见

OpenGL就是这么做的。

2.Lambert定理求光照强度也用点积:

Light=K.I.cos(theta)

K,I为常数,theta是平面法线与入射光线夹角

老王头的Fast Bump(Add Hyper Link here)也就是依据这个数学模型.但是他用了个很Cheap的Hack来模拟cosine

四.叉乘(Cross product)

叉乘:Vector1(x1,y1,z1),Vector2(x2,y2,z2):

其结果是个矢量.

方向是Vector1,Vector2构成的平面法线.再使用右手定则

长度是Length(Vector1)*Length(Vector2)*sin(theta)

theta是Vector1 & Vector2的夹角.

所以,平行的矢量叉乘结果为0矢量(长为0,方向任意)

计算结果矢量:(ox,oy,oz)

ox = (y1 * z2) - (y2 * z1)

oy = (z1 * x2) - (z2 * x1)

oz = (x1 * y2) - (x2 * y1)

用途:计算法向量,这是生成3D图形的很关键一步。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/9 17:22:21