AE表达式学习笔记——Vector Math(向量)篇

用户头像
深圳/设计爱好者/329天前/71浏览
AE表达式学习笔记——Vector Math(向量)篇
用户头像
柴先森
Vector Math是用来对二维、三维数值数组进行数学运算的表达式,主要作用于位置(position)、缩放(scale)、锚点(anchor point)等向量属性。
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzMjUyODMy) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
Vector Math菜单
收藏
add(vec1,vec2)
作用:
一个用于向量加法的函数,其作用是将两个向量(vec1 和 vec2)逐分量相加,返回一个新的向量。
// 以下两种写法完全等效:
add(vec1, vec2);
vec1 + vec2; // 更简洁,推荐
语法:
add(向量1,向量2)
示例:
motion1 = wiggle(2, 60);
motion2 = [Math.sin(time) * 10, 0];
add(motion1, motion2); // 同时叠加 wiggle 和 正弦波动画
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzMjU2NjA4) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
sub(vec1,vec2)
作用:
一个用于向量减法的函数,其作用是从向量 vec1 中减去向量 vec2,返回一个新的向量。
假设vec1 = [x1, y1],vec2 = [x2, y2],则sub(vec1, vec2)的结果是 [x1 - x2, y1 - y2]。
如果是三维向量(如3D图层中的位置),则同样会减去z分量:
vec1 = [x1, y1, z1],vec2 = [x2, y2, z2] → 结果 [x1 - x2, y1 - y2, z1 - z2],
sub(vec1, vec2)完全等同于直接使用-运算符(即vec1 - vec2)
语法:
sub(向量1,向量2)
示例:
图层看向目标:
targetPos = thisComp.layer("目标").position; // 目标图层
myPos = position; // 自身位置
dir = sub(targetPos, myPos); // 求方向向量
radians = Math.atan2(dir[1], dir[0]); // 获取角度(弧度)
degrees = radiansToDegrees(radians); // 转为角度
degrees
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzMjY4ODQw) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
mul(vec,amount)
作用:
一个用于向量标量乘法的函数,其作用是将向量vec的每个分量乘以标量值amount,返回一个新的缩放后的向量。
假设vec = [x, y],amount = 2,则 mul(vec, amount)的结果是[x * 2, y * 2]。
如果是三维向量(如3D位置),则每个分量(x, y, z)都会乘以amount:
vec = [x, y, z] → 结果[x * amount, y * amount, z * amount],
mul(vec, amount) 完全等同于直接使用*运算符(即 vec * amount 或 amount * vec)
语法:
mul(要被乘的向量,乘数)
示例:
按比例排列图层:
startPos = [150, 280]; // 起始位置,可自定义
spacing = [100, 0]; // 每个图层的间距(水平200,垂直0)
mul(spacing, index - 1) + startPos
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzMjY5MTUy) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
div(vec,amount)
作用:
一个用于向量标量除法的函数,其作用是将向量 vec 的每个分量除以标量值 amount,返回一个新的缩放后的向量。
假设 vec = [x, y],amount = 2,则 div(vec, amount) 的结果是 [x / 2, y / 2]。
如果是三维向量(如3D位置),则每个分量(x, y, z)都会除以 amount:
vec = [x, y, z] → 结果 [x / amount, y / amount, z / amount],
div(vec, amount)完全等同于直接使用 / 运算符(即 vec / amount)
语法:
div(要被除的向量,用于除法的除数)
示例:
两个图层之间取中点:
a = thisComp.layer("图层A").position;
b = thisComp.layer("图层B").position;
center = div(add(a, b), 2);
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzMjcwNzMy) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
clamp(value,limit1,limit2)
作用:
这是一个数值限制函数,用于将输入值 value 约束在 limit1 和 limit2 指定的范围内,返回一个不超过该范围的值。
语法:
clamp(输入值,边界值1,边界值2)
示例:
限制图层不超出某个范围:
// 确保图层位置在合成范围内
x = position[0];
y = position[1];
safeX = clamp(x, 0, thisComp.width);
safeY = clamp(y, 0, thisComp.height);
[safeX, safeY];
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzMjcwOTk2) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
dot(vec1,vec2)
作用:
这是一个向量点积(Dot Product)函数,用于计算两个向量的点积(也称为内积)。点积是向量运算中的基本操作,结果是一个标量(单个数值),它的作用是判断两个向量是否朝向一致!
  • dot > 0 → 方向相似(小于 90°)
  • dot = 0 → 垂直(90°)
  • dot < 0 → 方向相反(大于 90°)
语法:
dot(向量1,向量2)
示例:
控制透明度 / 颜色(越朝向目标越亮):
target = thisComp.layer("目标图层的名字");
dirToTarget = normalize(target.position - position);
myForward = normalize([1, 0]);
facing = dot(myForward, dirToTarget);
opacity = linear(facing, -1, 1, 0, 100);
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzMjk0Njgw) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
cross(vec1,vec2)
作用:
计算两个 3D 向量的“叉积”(cross product),结果是返回一个新的向量,它垂直于原来的两个向量,可以用来确定一个平面的法线方向,旋转轴或创建垂直于现有运动的效果。
语法:
cross(三维向量1,三维向量2)
示例:
沿法线方向移动图层:
a = normalize(vec1);
b = normalize(vec2);
normal = cross(a, b);
value + normal * 200 // 沿法线方向偏移 200 像素
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg4Mjg4) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg4Mjky) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
normalize(vec)
作用:
将向量vec转换为单位向量(也叫“方向向量”),即保留原始方向,但把长度变为 1,通俗理解就是:告诉我一个方向:“往右上方走”,但不告诉我要走多远,normalize()就是保留“方向”,去掉“距离”。
语法:
normalize(向量)
示例:
让图层以一定速度朝目标方向运动:
dir = normalize(target.position - position);
speed = 100; // 每秒移动速度
position + dir * speed * time
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg3OTk2) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg4MDAw) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
length(vec)
作用:
计算向量vec的长度,即从坐标系原点到向量终点的直线距离。
语法:
length(向量终点的坐标)
示例:
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg4OTc2) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg4OTg0) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
length(point1,point2)
作用:
计算两点之间的距离,point1和point2都是二维或三维坐标的数组(如 [x, y] 或 [x, y, z]),分别代表两个点的位置。
语法:
length(点1的坐标,点2的坐标)
示例:
a = thisComp.layer("A").position;
b = thisComp.layer("B").position;
d = length(a, b);
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg5MDQw) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg5MDQ4) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
lookAt(fromPoint,atPoint)
作用:
计算从fromPoint看向atPoint时,图层需要设置的旋转角度值。
语法:
lookAt(图层当前的世界坐标,目标点的世界坐标)
示例:
让图层朝向另一个图层(面向目标):
lookAt(position, thisComp.layer("目标").position)
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg5MTEy) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
AE表达式学习笔记——Vector Math(向量)篇(图ZMzkzNDg5MTE2) - 动效设计 - 站酷设计师柴先森原创素材 - 站酷ZCOOL
收藏
3
举报
|
3
分享
相关推荐
评论
用户头像
评论你的想法~
表情
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
加载中
你可能喜欢
相关收藏夹
大家都在看
登录注册