[数学][Vector]

Vector.2D:

加法a+b = ( (ax+bx) , (ay+by) )

意义:a向量和b向量首尾相连。以a的始点为始,以b的终点为终的向量就是a+b

 

减法:a-b = ( (ax-bx) , (ay-by) )

意义:两个向量始点重合,从b的终点开始到a的终点结束的向量就是a-b了

 

和常数相乘:a*n=e=(n*ax,n*ay)

意义:乘一个大于0的数,则向量的方向不变,只是在同方向上伸缩。乘一个小于0的数,则反方向伸缩。常数的大小决定伸缩程度

 

点乘:a·b= a.x * b.x + a.y * b.y

意义:a的长度与b在a上的投影长度的乘积,或者是b的长度与a在b上投影长的乘积,它是一个标量,而且可正可负。

 

向量的基本性质:
1) a + b = b + a
2) (a + b) + c = a + (b + c)
3) a + 0 = 0 + a = a
4) a + (-a) = 0
5) k*(l*a) = (k*l)*a = a*(k*l)
6) k*(a + b) = k*a + k*b

7) (k + l)*a = k*a + l*a

8) 1*a = a

9) a·b = b·a

10) a·(b + c) = a·b + a·c
11) k*(a·b) = (k*a)·b = a·(k*b)
12) 0·a = 0

13)a·a = |a|^2

 

向量的移动:

      v2.x = v1.x + vx;  // vx代表x方向位移

      v2.y = v1.y + vy;  // vy代表y方向位移

 

向量的投影:

     dp = v1.x * v2.x + v1.y * v2.y; // dp为v0,v1向量点乘的结果

 

 dp 即v1向量在v2向量方向上的投影长度,或者说v2在v1方向上的投影。如果dp是正数则两个向量指向相同的方向,如果是负数则他们的方向相对。

 投影向量:

     proj.vx=dp*v2.dx; proj.vy=dp*v2.dy  // 即v1向量在v2向量上的投影向量,v2.dx、v2.dy分别表示v2向量x、y方向的单位向量。

 

 Vector.3D:

     3D的笛卡尔坐标系有两种,左手坐标系和右手坐标系。我们采用左手坐标系。

     由于2D只是3D的一种特殊情况,所以向量在3D中的特性。有很多地方都是与3D相似的:


向量相等:每个分量相等(v0.x==v1.x && v0.y==v1.y && v0.z==v1.z)

向量相加每个分量相加(v0.x+v1.x,v0.y+v1.y,v0.z+v1.z)
向量相减:每个分量相减(v0.x-v1.x,v0.y-v1.y,v0.z-v1.z)

向量的模:即向量的长度

function getLength():Number
{
    Math.sqrt(v.x
*v.x+v.y*v.y+v.z*v.z);
}

向量的归一化:即单位向量


function normalize():void
{

    var vlen:Number = Math.sqrt(v.x*v.x + v.y*v.y + v.z*v.z);

      if( n != 0)

      {

          v.x = v.x / vlen;

          v.y = v.y / vlen;

          v.z = v.z / vlen;

    }

   }

 

 

 

向量与标量的乘法:=v0.x* k + v0.y * k + v0.z * k;

向量的点乘dot: = v0.x*v1.x+v0.y*v1.y+v0.z*v1.z;

      我们经常利用点乘来求两向量的夹角,如下:(v0 dot v1 = |v0|*|v1|*cos(θ)) (θ即两向量夹角) 

θ = Math.acos( v0 dot v1 / |v0|*|v1| );

p.s:

v0 dot v1=0
两个向量互相垂直
v0 dot v1>0
两个向量的夹角小于90度
v0 dot v1<0

两个向量的夹角大于90度

 


(*)向量的叉乘cross:

     向量的叉乘结果出来同样还是一个向量,该向量垂直与叉乘的俩向量。

     该向量的方向通过左手法则确定,即从第一个向量向第二个向量弯曲左手,左手大拇指所指向的方向即求得向量的方向。

     v0 = (x0,y0,z0) , v1 = (x1,y1,z1) .

     v0 cross v1= ( y0*z1 - y1*z0 , z0*x1 - z1*x0 , x0*y1 - x1*y0 )

     如果两个向量方向相同或者相反,他们的结果向量是一个零向量。

 

向量的叉乘主要应用求法向量:

     假设一个三角形的顶点为: p0,p1,p2 。 那么法向量求法如下:

     var v1 =  ( p1.x - p0.x , p1.y - p0.y , p1.z - p0.z );

     var v2 =  ( p2.x - p0.x , p2.y - p0.y , p2.z - p0.z );

 

     法向量 v = v1 cross v2; 

 

 

posted @ 2008-07-24 15:11  Memo  阅读(1394)  评论(0编辑  收藏  举报