三维向量笔记

笔记
一、
1)三维向量Vec3的使用:
(1)Vec3: cocos定义的一个三维向量的类,在cc模块中;

(2)向量在每个坐标轴的分量: x、y、z:

(3)构造一个向量的3种方式:
new Vec3(v: Vec3): new了一个Vec3的实例出来,然后我们的实例里面的x,y,z–>v的分量一样;
new Vec3(x,y,z): new Vec3的实例,实例xyz分别是这个参数;
cc模块也为我们定义了一个函数: cc.v3(x,y,z)
xyz是可选的,可以全都不填

(4)Vec3定义了一些常用的 静态常量(只用就行,不要修改他们)
UINT_X: Readonly (1,0,0)
UINT_Y: Readonly (0,1,0)
UINT_Z: Readonly (0,0,1)
ZERO: (0,0,0)
ONE: Readonly (1,1,1)
NEG_ONE: Readonly (-1,-1,-1)
(5)常用向量的 静态方法
向量长度: 开根号(xx + yy + z*z)
Vec3.len() –>静态方法求
v4.length–>直接通过方法搞

加减法:
   加法:
     v4.add(xxx)
     Vec3.add(xx, xx, xx)-->不改变向量结果,存储到另外一个变量
   减法:
      v4.subtract(xx)
      Vec3.subtract(v3, xx, xx)-->不改变向量结果,存储到另外一个变量

   加减法的本质: 三角形法则   四边形法则   c = a+b b = c-a

   应用: 相对于坐标原点,由从A点运动到B点, A到B的方向 向量怎么求呢? dir=B-A即可得到这个方向向量

2个向量点的距离: 
  (x1,y1,z1)  (x2,y2,z2)  --> (x2-x1平方 + y2-y1的平方 + z2-z1的平方)-->开平方
  Vec3.distance(v4, v3)
2个点之间: 向量的线性插值:
  (x1,y1,z1), (x2,y2,z2) --> 从A到B的点-->[0,1]这个范围-->A = A1 + t*(A2-A1)
  这个结果变为:修改自己的向量,因为返回的是this
  Vec3.lerp(v3, v1, v4, 0.3): v3 = v1 + 0.3 * (v4-v1)
  v1.lerp(v4, 0.3)-->修改到自己v1上
向量的点乘(得到一个数值,不是向量):
	理论:
	  A(x1,y1,z1)  B(x2,y2,z2)-->A*B = x1*x2 + y1*y2+ z1*z2
	  A*B = |A| * |B| * cos(夹角)-->得到了2个向量的余弦值出来
	    夹角:2个向量之间,较小的哪个角度[0, 180]
	cocos中计算:
	  静态方法: Vec3.dot(v1, v4)-->是一个number数值  


向量的叉积(返回的是一个向量):
  理论:
    AXB = (y1*z2-y2*z1, -(x1*z2 - x2*z1), x1*y2-x*2y1)
  叉积的几何意义:AB 2个向量 和 原点构成平面的法向量
    垂直向上: AXB
    垂直向下: BXA
  cocos计算: 
    Vec3.cross(v3,v1,v4)-->v3 = v1Xv4
    v1.cross(v4)-->让v1被修改了  v1 = v1 * v4

向量的单位化(单位向量: 方向相同,长度为1):
  理论:
    方向相同的向量有N多个
    特点:同一个方向的,成比例 x1/x2 = y1/y2 = z1/z2 = len1/len2
  cocos中计算:
    Vec3.normalize(v3, v4)  v3 = v4的单位向量
    v4.normalize()

(6)将一个标量分解到对应的向量上
已知方向向量dir, 速度为100,距离为100–>dir这个方向上;
x/x_new = len / 100 –> x_new = 100 * x / len–>dir为1, x_new = speed * x;
含义与运用: 已知一个物体的速度大小和方向,沿着这个方向走–>沿着x走这个多,沿着y走这么多(同时修改x和y即可);
其实就是初中物理的: 运动的分解; 高中物理叫做:正交分解
之所以能分解,那么就是根据这个等式计算得到的;
二、
let v: Vec3 = cc.v3(3, 4, 5);
let v1 = new Vec3(0, 0, 0);
let v3 = new Vec3(v);

    console.log(Vec3.UNIT_X, Vec3.UNIT_Y, Vec3.UNIT_Z, Vec3.ZERO, Vec3.ONE, Vec3.NEG_ONE);

    let v4 = new Vec3(Vec3.UNIT_X);
    console.log(v4);

    console.log(Vec3.len(v4));
    console.log(v4.length());

    v4.add(Vec3.UNIT_Y);
    Vec3.add(v3, Vec3.ONE, Vec3.NEG_ONE);
    console.log(v3);

    v4.subtract(Vec3.UNIT_X);

    let len: number = Vec3.distance(v4, v3);

    Vec3.lerp(v3, v1, v4, 0.3);

    Vec3.dot(v1, v4);

    v1.cross(v4);

    v4.normalize();
    原文作者:菜鸟lr
    原文地址: https://blog.csdn.net/m0_37931718/article/details/108736862
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞