zoukankan      html  css  js  c++  java
  • [数学][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; 

  • 相关阅读:
    数据库中的 索引
    JQuery中ajax请求
    如何优化广告,提高点击率
    常用的正则表达式
    全栈工程师之路中级篇之小程序开发前言
    ionic入门教程第四课使用$controllerProvider按需加载controller
    全栈工程师之路中级篇之小程序开发第一章第一节注册小程序
    ionic入门教程第三课在项目中使用requirejs分离controller文件和server文件
    ionic入门教程第五课举例子说明异步回调$q及$q在项目中的用法
    求两个整数的最大公约数和最小公倍数
  • 原文地址:https://www.cnblogs.com/Memo/p/1250559.html
Copyright © 2011-2022 走看看