iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >canvas如何实现高阶贝塞尔曲线
  • 405
分享到

canvas如何实现高阶贝塞尔曲线

2023-06-09 15:06:06 405人浏览 泡泡鱼
摘要

这篇文章主要介绍canvas如何实现高阶贝塞尔曲线,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为什么需要一个试验场?在绘制复杂的高阶贝塞尔曲线时无法知道自己需要的曲线的控制点的精确位置。在试验场中进行模拟,可以实时

这篇文章主要介绍canvas如何实现高阶贝塞尔曲线,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

为什么需要一个试验场?

在绘制复杂的高阶贝塞尔曲线时无法知道自己需要的曲线的控制点的精确位置。在试验场中进行模拟,可以实时得到控制点的坐标值,将得到的点坐标变为对象数组传递进BezierMaker类就可以生成目标曲线

效果图

canvas如何实现高阶贝塞尔曲线 
 

canvas如何实现高阶贝塞尔曲线

功能

  1. [x] 试验场可添加任意数量控制点

  2. [x] 试验场支持展示曲线绘制的形成动画

  3. [x] 控制点可自由拖拽

  4. [x] 支持显示贝塞尔曲线形成过程的切线

  5. [x] 3阶及以下贝塞尔曲线的绘制采用原生api

引入

<script src="./bezierMaker.js"></script>

绘制

上面的效果图为试验场的使用,当你通过试验场获得控制点的准确坐标之后,就可以调用bezierMaker.js进行曲线的直接绘制。

var canvas = document.getElementById('canvas')//3阶之前采用原生方法实现var arr0 = [{x:70,y:25},{x:24,y:51}]var arr1 = [{x:233,y:225},{x:170,y:279},{x:240,y:51}]var arr2 = [{x:23,y:225},{x:70,y:79},{x:40,y:51},{x:300, y:44}]var arr3 = [{x:333,y:15},{x:70,y:79},{x:40,y:551},{x:170,y:279},{x:17,y:239}]var arr4 = [{x:53,y:85},{x:170,y:279},{x:240,y:551},{x:70,y:79},{x:40,y:551},{x:170,y:279}]var bezier0 = new BezierMaker(canvas, arr0, 'black')var bezier1 = new BezierMaker(canvas, arr1, 'red')var bezier2 = new BezierMaker(canvas, arr2, 'blue')var bezier3 = new BezierMaker(canvas, arr3, 'yellow')var bezier4 = new BezierMaker(canvas, arr4, 'green')bezier0.drawBezier()bezier1.drawBezier()bezier2.drawBezier()bezier3.drawBezier()bezier4.drawBezier()

绘制结果

canvas如何实现高阶贝塞尔曲线

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

核心原理

绘制贝塞尔曲线

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

canvas如何实现高阶贝塞尔曲线 
 

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

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阶贝塞尔函数来计算下一层控制点并对应连线。具体逻辑作者会留到深入讲解贝塞尔曲线公式原理的时候一起梳理一下试验场的动画生成原理~

以上是“canvas如何实现高阶贝塞尔曲线”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: canvas如何实现高阶贝塞尔曲线

本文链接: https://www.lsjlt.com/news/256474.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • canvas如何实现高阶贝塞尔曲线
    这篇文章主要介绍canvas如何实现高阶贝塞尔曲线,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为什么需要一个试验场?在绘制复杂的高阶贝塞尔曲线时无法知道自己需要的曲线的控制点的精确位置。在试验场中进行模拟,可以实时...
    99+
    2023-06-09
  • canvas如何仿写贝塞尔曲线
    这篇文章给大家分享的是有关canvas如何仿写贝塞尔曲线的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图:html<canvas id="mycan...
    99+
    2024-04-02
  • HTML5 Canvas如何绘制贝塞尔曲线
    这篇文章给大家分享的是有关HTML5 Canvas如何绘制贝塞尔曲线的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 贝塞尔曲线 :它可以是二次和三次方的形式,一般用于绘制复杂而...
    99+
    2024-04-02
  • 如何使用canvas绘制贝塞尔曲线
    今天就跟大家聊聊有关如何使用canvas绘制贝塞尔曲线,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、二次贝塞尔曲线  quadraticCurv...
    99+
    2024-04-02
  • Android用Canvas绘制贝塞尔曲线
    用Canvas画贝塞尔曲线,要画贝塞尔曲线首先了解贝塞尔曲线: 由于用计算机画图大部分时间是操作鼠标来掌握线条的路径,与手绘的感觉和效果有很大的差别。即使是一位精明的画师能轻松绘出各...
    99+
    2024-04-02
  • HTML5 Canvas中如何使用路径描画二阶、三阶贝塞尔曲线
    这篇文章主要介绍“HTML5 Canvas中如何使用路径描画二阶、三阶贝塞尔曲线”,在日常操作中,相信很多人在HTML5 Canvas中如何使用路径描画二阶、三阶贝塞尔曲线问题上存在疑惑,小编查阅了各式资料...
    99+
    2024-04-02
  • Android怎么用Canvas绘制贝塞尔曲线
    这篇文章主要介绍了Android怎么用Canvas绘制贝塞尔曲线的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么用Canvas绘制贝塞尔曲线文章都会有所收获,下面我们一起来看看吧。用Canvas...
    99+
    2023-07-02
  • 如何用html5的canvas画布绘制贝塞尔曲线
    这篇“如何用html5的canvas画布绘制贝塞尔曲线”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2024-04-02
  • C#实现贝塞尔曲线的方法
    本文实例为大家分享了C#实现贝塞尔曲线的具体代码,供大家参考,具体内容如下 话不多直接上代码 public Transform[] controlPoints; //曲线的控制点 ,...
    99+
    2024-04-02
  • 基于canvas如何使用贝塞尔曲线平滑拟合折线段
    小编给大家分享一下基于canvas如何使用贝塞尔曲线平滑拟合折线段,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!为什么要平滑拟合折线段先来看下Echarts下折线图的渲染效果: 一开始我没注意到其实这个折线段是曲...
    99+
    2023-06-09
  • android实现贝塞尔曲线之波浪效果
    本文实例为大家分享了android实现贝塞尔曲线之波浪效果的具体代码,供大家参考,具体内容如下 1 前言 为了给我以前的博客填坑,这章讲解贝塞尔曲线的几个常用的应用: 1.波浪效果2...
    99+
    2024-04-02
  • js基于div丝滑实现贝塞尔曲线
    目录引言分析实现布局如何计算y的偏移量Math.sin() 和 Math.cos()正弦曲线余弦曲线计算更多信息完善剩余完成跑马灯制作贝塞尔曲线简单封装一下方法完整示例styleSC...
    99+
    2024-04-02
  • 怎么用html5的canvas画布绘制贝塞尔曲线
    这篇文章主要介绍“怎么用html5的canvas画布绘制贝塞尔曲线”,在日常操作中,相信很多人在怎么用html5的canvas画布绘制贝塞尔曲线问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • Android如何使用贝塞尔曲线画心形
    这篇“Android如何使用贝塞尔曲线画心形”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android如何使用贝塞尔曲线画...
    99+
    2023-07-02
  • OpenGL 实践中如何进行贝塞尔曲线绘制
    这篇文章给大家介绍OpenGL 实践中如何进行贝塞尔曲线绘制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。说到贝塞尔曲线,大家肯定都不陌生,网上有很多关于介绍和理解贝塞尔曲线的优秀文章和动态图。以下两个是比较经典的动图...
    99+
    2023-06-04
  • Android通过交互实现贝塞尔曲线的绘制
    目录前言获取触控位置交互绘制实现绘制代码运行效果总结前言 之前几篇我们介绍了贝塞尔曲线的原理、绘制曲线和动效实现,这些都是代码预设好的,如果我们要根据需要自行绘制曲线,就需要使用交互...
    99+
    2024-04-02
  • Android自定义View绘制贝塞尔曲线实现流程
    目录前言二阶贝塞尔曲线三阶贝塞尔曲线前言 对于Android开发,实现贝塞尔曲线还是比较方便的,有对应的API供你调用。由于一阶贝塞尔曲线就是一条直线,实际没啥多大用处,因此,下面主...
    99+
    2022-11-13
    Android 贝塞尔曲线 Android 贝塞尔曲线实现方法
  • 怎么用android实现贝塞尔曲线之波浪效果
    这篇文章主要介绍“怎么用android实现贝塞尔曲线之波浪效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用android实现贝塞尔曲线之波浪效果”文章能帮助大家解决问题。1 前言贝塞尔曲线的...
    99+
    2023-07-02
  • CSS3贝塞尔曲线中如何实现链接悬停动画效果
    本篇内容介绍了“CSS3贝塞尔曲线中如何实现链接悬停动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们将使用 CSS3 动画过渡来创...
    99+
    2023-06-08
  • css3+贝塞尔曲线如何实现可伸缩input搜索框效果
    这篇“css3+贝塞尔曲线如何实现可伸缩input搜索框效果”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“css3+贝塞尔曲线如何实现可伸缩input搜索框效果”,小编整理了以下知识点,请大家...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作