美文网首页
Ae Expression -Vector Math

Ae Expression -Vector Math

作者: Star2014 | 来源:发表于2020-04-29 13:53 被阅读0次

    AE表达式:数学矢量方法(仅供参考)


    add(vec1, vec2)
    参数类型:vec1 和 vec2 是数组
    返回类型:数组
    返回 数组 vec1 和数组 vec2 同维度相加的值

    add(3,4);  //结果是 7
    
    add([2,3],[4,5]);   //结果是 [6,8]
    

    sub(vec1, vec2)
    参数类型:vec1 和 vec2 是数组
    返回类型:数组
    返回 数组 vec1 和数组 vec2 同维度相减的值

    sub(3,4);  //结果是 -1
    
    sub([2,3],[4,5]);   //结果是 [-2,-2]
    

    mul(vec, amount)
    参数类型:vec 是数组,amount 是数值
    返回类型:数组
    返回 数组 vec 的每个维度的值与数值 amount 相乘的值

    mul(3,4);  //结果是12
    
    mul([2,3],4);   //结果是 [8,12]
    

    div(vec, amount)
    参数类型:vec 是数组,amount 是数值
    返回类型:数组
    返回 数组 vec 的每个维度的值与数值 amount 相除的值

    div(16,4);  //结果是4
    
    div([16,32],4);   //结果是 [4,8]
    

    clamp(value, limit1, limit2)
    参数类型:value、limit1 和 limit2 是数值或数组
    返回类型:数值 或 数组
    限制 value 的每个维度的值在 limit1 和 limit2 相应维度值之间

    var value  //例如这个定义旋转属性值的变量
    clamp(value, 100, 30);  //则旋转value的值返回 100 至 30之间。Ps:如果此表达式作用于多维度属性上,则缺少的维度值用 0 代替
    
    var value  //例如这个定义位置属性值的变量
    clamp(value, [15, 30],[60,80]);   //位置value的值返回相应维度值之间。即[15-60之间,30-80之间]
    

    dot(vec1, vec2)
    参数类型:vec1 和 vec2 是数组
    返回类型:数值
    返回 vec1 和 vec2 矢量的点积

    dot(5, 6);  //返回结果是 30
    
    dot([2,6],[4,2]); //返回结果是 20  
    点积的计算公式:
    a = (a1,a2);
    b = (b1,b2);
    a * b = a1 * b1 + a2 * b2
    

    cross(vec1, vec2)
    参数类型:vec1 和 vec2 都是数组 [2 或 3]
    返回类型:数组 [2 或 3]
    返回 vec1 和 vec2 的矢量叉积

    cross([1,5], [2,4]);  //返回结果是 [0,0,-6] 。如果作用在2维度属性上,只取结果前2维度的值,忽略第3维度
    
    cross([2,5,3],[2,4,3]); //返回结果是 [3,0,-2] 
    注释:
    两个向量的叉乘,又叫向量积、外积、叉积,叉乘的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量组成的坐标平面垂直。
    向量 a 和向量 b :
    a = (x1,y1,z1);
    b = (x2,y2,z2);  
    其中:i ,  j , k 分别代表 x , y , z 的正向坐标
    i = (1,0,0);
    j = (0,1,0);
    k = (0,0,1);
    a和b的叉乘公式为:
    a * b = (y1 z2 - y2 z1) i + (x1 z2 - x2 z1) j + (x1 y2 - x2 y1) k 
    

    normalize(vec) 等同 div(vec, length(vec))
    参数类型:vec 是数组
    返回类型:数组
    归一化矢量,使其值控制在 1 和 1 范围之内

    normalize(100);  //返回结果是 1 。
    
    normalize([-4,6]);
    或
    div([-4,6], length([4,6])); //返回结果是 [-0.6,0.8]
    

    length(vec)
    参数类型:vec 是数组
    返回类型:数值
    返回矢量 vec.的长度

    length(10);  //参数是数值10,返回结果是 10 。
    
    length([10,5]);  //参数是数组矢量有 x, y坐标 [10,5] ,返回结果是 11.2。
    x 到 y 的长度 :
    x=10,
    y=5,
    √(a² + b²) = 11.2
    

    length(point1, point2) 等同 length(sub(point1, point2))
    参数类型:point1 和 point2 是数组
    返回类型:数值
    返回 两矢量参数 point1, point2 之间的距离,[两数组同维度相减的值,再相减 ,其结果取绝对值]

    length(-8, 5);  //参数为数值时直接计算两点的差值再取绝对值 ,结果是 -8-5=-13 ,取绝对值13
    
    length([-4,6],[2,2]); //参数为数组矢量有 x ,y 坐标时,结果是 -4-2=-6 和 6-2=4 , -6²-4²=-52  取绝对值 52    结果 √52 = 7.2
    or
    length(sub([-4,6], [2,2]))  //作用同上
    

    lookAt(fromPoint, atPoint)
    参数类型:fromPoint 和 atPoint 是数组 [3]
    返回类型:数组 [3]
    参数 fromPoint 是您要定向的图层的世界空间中的位置,参数 atPoint 是您要将图层指向的世界空间中的点

     lookAt(position, thisComp.layer(1).position);  
    // 图层:聚光灯 和 图层1 。在聚光灯的方向 Orientation 属性下添加此表达式,会将聚光灯的光点指向同合成中的图层1 的锚点。[聚光灯光点指向图层 1 锚点。移动图层 1 的锚点,聚光灯光点始终跟随]
    

    相关文章

      网友评论

          本文标题:Ae Expression -Vector Math

          本文链接:https://www.haomeiwen.com/subject/kdbgwhtx.html