UNPKG

clay-core

Version:

Provide a more friendly web-side drawing interface!

28 lines (23 loc) 991 B
/** * catmull-rom插值 * 给定四个点p0,p1,p2,p3,可以计算出p1,p2之间的插值,其中的p0,p3为控制点 */ clay.catmullRom = function () { var scope = {}; // deep为偏移量 deep的取值范围为[0,1],deep取0将得出p1点,deep取1将得出p2点 var catmull = function (deep) { var deep2 = deep * deep, deep3 = deep2 * deep; return [ 0.5 * (scope.x[0] * deep3 + scope.x[1] * deep2 + scope.x[2] * deep + scope.x[3]), 0.5 * (scope.y[0] * deep3 + scope.y[1] * deep2 + scope.y[2] * deep + scope.y[3]) ]; }; // 设置一组点 // 四个点 p1,p2,p3,p4 catmull.setP = function (p1, p2, p3, p4) { scope.x = clay.Matrix4([-1, 2, -1, 0, 3, -5, 0, 2, -3, 4, 1, 0, 1, -1, 0, 0]).use(p1[0], p2[0], p3[0], p4[0]); scope.y = clay.Matrix4([-1, 2, -1, 0, 3, -5, 0, 2, -3, 4, 1, 0, 1, -1, 0, 0]).use(p1[1], p2[1], p3[1], p4[1]); return catmull; }; return catmull; };