JavaScript 的贝塞尔曲线实现

a,b均为{x:0,y:0}的对象
也可以改成多个点的贝塞尔

function cubic(a, b, t) {
    arr = [{
        x: 0,
        y: 0
    }, a, b, {
        x: 1,
        y: 1
    }]
 
    function calc(t, arr) {
        var ary = []
        var node = arr.reduce(function (previous, current, index) {
            var p = {
                x: arr[index - 1].x + (arr[index].x - arr[index - 1].x) * t,
                y: arr[index - 1].y + (arr[index].y - arr[index - 1].y) * t
            }
            ary.push(p)
            return p
        })
        if (ary.length > 1) {
            return calc(t, ary);
        } else {
            return {
                t,
                y: node.y
            };
        }
    }
    return calc(t, arr).y;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.