UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

47 lines (46 loc) 1.42 kB
"use strict"; export function createKeyframeTangent() { return { slope: 0, accel: 0 }; } export function getTangent(keyframe, isInTangent) { if (isInTangent) { return keyframe.in; } else { return keyframe.out || keyframe.in; } } export function keyframeTangentToEndPoint(keyframe, isInTangent, target) { const tangent = getTangent(keyframe, isInTangent); const angle = Math.asin(tangent.slope); target.x = Math.cos(angle) * tangent.accel; target.y = Math.sin(angle) * tangent.accel; } export function endPointToKeyframeTangent(endPoint, isInTangent, target) { const angle = endPoint.angle(); target.slope = Math.sin(angle); target.accel = endPoint.length(); } export function keyframeTangentSplit(keyframe) { if (!keyframe.out) { keyframe.out = createKeyframeTangent(); } copyKeyframeTangent(keyframe.in, keyframe.out); } export function keyframeTangentMerge(keyframe) { const _in = keyframe.in; const _out = keyframe.out; if (!_out) { return; } keyframe.in.slope = (_in.slope + _out.slope) * 0.5; keyframe.in.accel = (_in.accel + _out.accel) * 0.5; delete keyframe.out; } export function copyKeyframeTangent(src, target) { target.slope = src.slope; target.accel = src.accel; } export function lerpKeyframeTangents(t1, t2, lerp, target) { target.slope = t1.slope * (1 - lerp) + t2.slope * lerp; target.accel = t1.accel * (1 - lerp) + t2.accel * lerp; }