您的位置:首页 > 其它

游戏中两个常用的数学运算推导及算法推论

2017-01-03 23:44 281 查看
在数学中,几何向量(也称为欧几里得向量,通常简称向量、矢量),指具有大小和方向的几何对象,可以形象化地表示为带箭头的线段:箭头所指,代表向量的方向。

向量a的大小记做|a|。

向量满足平行四边形定则(也叫三角形定则),即两个力合成时,以表示这两个力的线段为邻边作平行四边形,这两个邻边之间的对角线就代表合力的大小和方向。

向量的数量积(又叫做点积或内积)是一个值,记做a·b,a·b=|a|·|b|·cos〈a,b〉,其中〈a,b〉表示向量a和向量b的夹角,向量夹角的取值范围在0到π之间。

向量的向量积(又叫做外积或叉积)是一个向量,记作a×b(这里“×”并不是乘号,只是一种表示方法,与“·”不同,也可记做“^”),a×b的大小等于|a|·|b|·sin〈a,b〉。a×b的方向满足右手定则,即若坐标系满足右手定则(右手系)时,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向的方向就是a×b的方向。

若向量a=(xa, ya, za),向量b=(xb,
yb, zb),则a×b=(ya·zb-za·yb)i+(za·xb-xa·zb)j+(xa·yb-ya·xb)k,其中i,j,k分别为x,y,z轴的单位向量(长度为1,方向为坐标轴方向)

这里应用上面向量的知识,我们来判断平面上三个点的位置关系:

给定三个点A(x1, y1),B(x2, y2),C(x3, y3),设i,j分别为x轴和y轴的单位向量,向量AB=(x2-x1,
y2-y1),向量AC=(x3-x1, y3-y1),AB×AC(差乘)=[(x2-x1)(y3-y1)-(x3-x1)(y2-y1)]k=(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)k,因此当向量k的系数(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)大于0时,向量AB和向量AC的叉积沿z轴正向,小于0时,沿z轴负向,因此若z轴方向从屏幕所在平面内部指向外部,则根据右手定则,当系数(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)为正时,向量AB顺时针转动一个小于180度的角度后能够与AC同向:



也就是说点A->B->C按照逆时针的方向组成三角形。反之,如果系数(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)为负,则A->B->C按照顺时针方向组成三角形。如果系数(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)为0,则A、B、C三点共线(在同一直线上)。

利用上面得到的结论,我们得到下面的推论:

三个点A(x1, y1),B(x2, y2),C(x3, y3)不变,过A、B做一条直线,此时可以通过向量AB和AC叉积系数(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)的符号来区分点C在AB所在直线的哪一侧(我们可以理解为顺时针一侧或者逆时针一侧)。因此给定一系列的点C1,C2,C3……,可以通过计算叉积的系数来将这一系列的点分为两组,每组各位于AB所在直线的一侧。

 

下面是利用三个点A(x1, y1),B(x2, y2),C(x3, y3)的坐标和向量的知识求解三角形ABC面积的推导。

首先是正切的到角公式,我们记向量AB和AC的夹角为α,直线AB的斜率为kAB,直线AC的斜率为kAC,则有下面的公式:

tanα=(kAC-kAB) / (1+kAB·kAC)

倒角公式的推导如下:



如图,直线AB和x轴的夹角为β,AC和x轴的夹角为γ,则kAB=tanβ,kAC=tanγ,因此tanα=tan(γ-β)(三角形外角公式)

tan(γ-β)=(tanγ-tanβ)
/ (1+tanγ·tanβ)(两角和差的正切公式)

因此将kAB=tanβ,kAC=tanγ带入上面的式子得到到角公式。

接着来求三角形ABC的面积:

我们知道三角形的面积等于二分之一底乘高,我们以AB为底,高h=|AC|×|sinα|(注:|AC|为向量AC的长度),因此面积S=1/2 × |AB| × |AC| × |sinα|=1/2 × |AB| × |AC| × |cosα| × |sinα|
/ |cosα|,其中:

|AB| × |AC| × |cosα|=|AB·AC|(AB和AC的数量积的绝对值)=|(x3-x1)(x2-x1)+(y3-y1)(y2-y1)|

|sinα| / |cosα|=|tanα|=|[(x2-x1)(y3-y1)-(x3-x1)(y2-y1)]/
[(x2-x1)(x3-x1)+(y2-y1)(y3-y1)]|

将上面两个式子带入到三角形面积的计算公式中,化简得到:

三角形面积S=1/2 × |x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2|,可以看到(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)正是我们前面推导三个点的位置关系时用到的系数。

此外,还可以联系行列式的知识来表示三角形的面积,(x1·y2+x2·y3+x3·y1-x1·y3-x2·y1-x3·y2)正是下面的三阶行列式的值:



 

如果有什么问题欢迎留言~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法