canvas实现高阶贝塞尔曲线


当前第2页 返回上一页

当控制点少于3个时,会适配使用原生的API接口。当控制点多于2个后,由我们自己实现的函数进行描点绘制。

核心原理

绘制贝塞尔曲线

绘制贝塞尔曲线的核心点在于贝塞尔公式的运用:


这个公式中的P0-Pn代表了从起点到各个控制点再到终点的各点与占比t的各种幂运算。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

BezierMaker.prototype.bezier = function(t) { //贝塞尔公式调用

    var x = 0,

        y = 0,

        bezierCtrlNodesArr = this.bezierCtrlNodesArr,

        //控制点数组

        n = bezierCtrlNodesArr.length - 1,

        self = this

    bezierCtrlNodesArr.forEach(function(item, index) {

        if(!index) {

            x += item.x * Math.pow(( 1 - t ), n - index) * Math.pow(t, index)

            y += item.y * Math.pow(( 1 - t ), n - index) * Math.pow(t, index)

        } else {

        //factorial为阶乘函数

            x += self.factorial(n) / self.factorial(index) / self.factorial(n - index) * item.x * Math.pow(( 1 - t ), n - index) * Math.pow(t, index)

            y += self.factorial(n) / self.factorial(index) / self.factorial(n - index) * item.y * Math.pow(( 1 - t ), n - index) * Math.pow(t, index)

        }

    })

    return {

        x: x,

        y: y

    }

}

对所有点进行遍历同时根据当前占比t的值(0<=t<=1),计算出当前在贝塞尔曲线上的点坐标x,y。t的取值作者分成了1000份,即每次运算t+=0.01。此时算出的x,y即所求的贝塞尔曲线分成了1000份之后的某一点。当t值从0~1遍历1000次后生成1000个x,y对应坐标,依次描点画线即可模拟出高阶贝塞尔曲线。

对于贝塞尔公式的推导作者会在之后的文章中专门说明,现在你只需要知道我们通过贝塞尔公式计算出实际贝塞尔曲线被等分成了1000份的各点,用直线连接各点后即可模拟出类曲线。

对于模拟场贝塞尔曲线生成动画的实现

这个部分相关代码可以参考这里

整体思路是用递归的方式来将每个一层控制点当做1阶贝塞尔函数来计算下一层控制点并对应连线。具体逻辑作者会留到深入讲解贝塞尔曲线公式原理的时候一起梳理一下试验场的动画生成原理~

相关推荐:

使用CSS做贝塞尔曲线

贝塞尔曲线的应用详解

实现canvas贝塞尔曲线效果代码演示

以上就是canvas实现高阶贝塞尔曲线的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

关于canvas的一个实例教程--刮刮乐

html5和js绘制图片到canvas的方法

html5 canvas绘制爱心的方法示例

canvas绘制奥运五环代码分享

html5中canvas元素如何绘制图形

html5 canvas学习的实例介绍

canvas如何来绘制一个椭圆形?canvas画椭圆的方法总结

canvas中beginpath()和closepath()作用的实例解析

canvas实现圆形进度条并显示数字百分比

html5 canvas常用属性方法(介绍)

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...