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实现高阶贝塞尔曲线的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

html5 canvas图像处理的实现代码分享

怎样用canvas来绘制弧线和圆

使用html5的canvas和javascript创建一个绘图程序的示例代码

使用html5 canvas api中的clip()方法裁剪区域图像代码实例

html5利用canvas绘制哆啦a梦头部(代码实例)

js html5 canvas绘制图片的方法

微信小程序-canvas生成图片并保存到本地

html5 canvas的绘制文本自动换行的示例代码

canvas实现二维码和图片合成的示例代码

利用html5中的canvas绘制笑脸的代码

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




打赏

取消

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

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

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

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

评论

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