贝塞尔曲线(Bezier curves)是曲率的一种典型代表,而且在很多应用中都会运用到,比如计算机的图形学中、字体和动画。如果你以前玩过CSS,那么你可能就运到过贝塞尔曲线。例如,在CSS的时间函数(timing function)中就有一个贝塞尔曲线—— x 轴和 y 轴的距离用来确定时间。

为什么要使用它们

从自己的角度来说,我们需要画一条曲线,它可以会消耗 100px 。画这样的一条曲线是非常的方便。不幸运的是,画这样的曲线会有非常多的原因,最明显的就是存储的开销非常的大。

如果我们可以调用一个函数 100 次,而且每次收集一个点。为了这个目标,我们可以创建一个函数: /** * @param {Number} t Number from 0 to 1. * @return {Array} Point on the curve */function getCurveLocation(t) { ... }

函数需要一个从 0 到 1 的数字,这主要是我们需要画 100 个点,我们把这个函数称之为 getCurveLocation ,它的值空间将是 100 次。 var points = []for(var i = 0; i <= 100; i++) { points.push(getCurveLocation(i * .01))}

我们都完成了,这个设置代表我们的曲线在任意的像素位置。这个很简单——我们只是增加和减少循环计数从而得到所需要的像素数量,然后再渲染到屏幕上。

定义

getCurveLocation 是如何定义的呢?那是贝塞尔曲线发挥作用的地方。它的定义一般如下:

让我们来分解这个公式。这一开始只是一个实现一个方式。就算你不理解这个公式的每一个部分,这并不重要,稍后我们会通过示例将这一切联系在一起。

B 是一个函数,它接收一个数字的参数 t ,而且它的值是从 0 到 1 ,并且其返回的是曲线上的每个点。

n 代表贝塞尔曲线的程度,其角度越高,曲线形状就越复杂。大多数的时候,二次平方和三次立方是我们所需要的。 i 是一个整数,从 0 开始,并且每个循环将增加一次。

代表二项式系数。如果我们扩展出二次项,比如 (x+y)^n 。我们这可以走一个捷径。不管是不是二次项,比如 n=3 和 i=2 ,都可以快速通过这个组合快速的评估这个表达式。

代表一个多项式中的特定项。 PI 是其中的一个控制点。

知识点

从下面的向个示例开始,让我们创建一个贝塞尔曲线: P0 = (0,0)P1 = (.2, .8)P2 = (.9, .6)P3 = (1, 1)

因为这有 4 个点,而这个贝塞尔曲线有三个点,而它有四个循环点,而且每个循环点的结果如下:

循环1:

循环2:

循环3:

循环4:

最后的多项式:

让欠通过 P 的变量来绘制其对应的方程式:

你可以觉得这条曲线不太有用,但这个从 0 到 1 的域是非常有意义的:

看起来应该蛮熟悉的,它是文章开始使用的贝塞尔曲线。从 0 至 1 之间的域是非常重要的,因为所有有趣的事情都发生在这两个值上面。先来看看 t=0 时的多项式:

接下来再看看 t=1 的多项式:

我们得到了最后一个点。不管第一个点和最后一个点在哪里, t=0 将始终返回第一个点, t=1 将始终返回最后一个点。这点真的非常的强大,不管多项式有多复杂,都可以很容易的分析路径的开始点和结束点。任何其他的 t 值不会取消。例如,在这里可以改变 P1 这个第二点,得到不同的曲线咱径:

当 P1 增加时,曲线向上弯曲,然而它的速度越来越慢。可以修改 P1 的值来证明这一点。而且我们可以通过公式来阐述这一切。

让我们来看看 t=.25 时曲线的弯曲程度:

显而易见, P1 比 P2 更有发言权。现在我们来看看 t=.75 的效果:

现在 P2 更高,实现逆转。所以当 t 每增加一次,那么其会有一个独特的控制点。

在文中使用了三次贝塞尔曲线作为示例,直觉上也适用于其他的贝塞尔曲线。例如,贝塞尔曲线有三个点,两点终端生个控制点:

曲线会根据控制点 P1 做变化。随着 P1 和端端在同一直线上时,会得到一条直线。这也就是得到我们常见的 linear 效果。这一现象非常值得我们去探索。同时希望你能通过这篇文章得到一些洞察力。从一个简单的输入 0 到 1 可以得到对应的曲线。

扩展阅读

Understanding CSS Timing Functions

Easing Functions (aka Timing Functions) in CSS3

本文根据 @Shawn O'Mara 的《 Mathematical Intuition Behind Bezier Curves 》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处: https://buildingvts.com/mathematical-intuition-behind-bezier-curves-2ea4e9645681#.k6pdvyhgc 。

大漠

常用昵称“大漠”,W3CPlus创始人,目前就职于手淘。对HTML5、CSS3和Sass等前端脚本语言有非常深入的认识和丰富的实践经验,尤其专注对CSS3的研究,是国内最早研究和使用CSS3技术的一批人。CSS3、Sass和Drupal中国布道者。2014年出版《 图解CSS3:核心技术与案例实战 》。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

html贝塞尔曲线在线,贝塞尔曲线的一些事情_html/css_WEB-ITnose相关推荐

  1. 光滑曲线_计算机图形学十:贝塞尔曲线与贝塞尔曲面

    贝塞尔曲线与贝塞尔曲面 1 贝塞尔曲线(Bézier Curves) 在进入具体原理讲解之前,首先看一下一条实际的贝塞尔曲线长什么样子 其中 为 控制点,蓝色所表示曲线正是非常著名的贝塞尔曲线了,可以 ...

  2. 【Android UI】贝塞尔曲线 ② ( 二阶贝塞尔曲线公式 | 三阶贝塞尔曲线及公式 | 高阶贝塞尔曲线 )

    文章目录 一.二阶贝塞尔曲线公式 二.三阶贝塞尔曲线 三.高阶贝塞尔曲线 贝塞尔曲线参考 : https://github.com/venshine/BezierMaker 一.二阶贝塞尔曲线公式 二 ...

  3. 【Android UI】贝塞尔曲线 ① ( 一阶贝塞尔曲线 | 二阶贝塞尔曲线 )

    文章目录 一.一阶贝塞尔曲线 二.二阶贝塞尔曲线 贝塞尔曲线参考 : https://github.com/venshine/BezierMaker 一.一阶贝塞尔曲线 一阶贝塞尔曲线 本质 是一条直 ...

  4. 贝塞尔曲线和贝塞尔曲面_TimelineMax:处理贝塞尔(Bézier)补间

    贝塞尔曲线和贝塞尔曲面 当您需要高级功能时,GSAP插件非常有用. 我将在本教程中解释的BezierPlugin可以帮助沿定义为点/值数组的弯曲贝塞尔曲线路径上的几乎任何一个或多个属性设置动画. 在跳 ...

  5. GIS开发:画曲线(贝塞尔)

    在地图开发中,有时会用到画曲线,一般的地图API中,都会提供画曲线的方法,或者提供相应的图例. 下边简单的介绍一下,如何在地图上根据点的位置,画一条贝塞尔曲线. 贝塞尔曲线(Bézier curve) ...

  6. 贝塞尔(贝兹尔)曲线介绍

    2019独角兽企业重金招聘Python工程师标准>>> 贝塞尔(贝兹尔)曲线介绍 什么是贝塞尔曲线? "贝赛尔曲线"是由法国数学家Pierre Bézier所发明 ...

  7. java贝塞尔曲线_贝塞尔曲线学习

    贝塞尔曲线学习 1.贝塞尔曲线 以下公式中: B(t)为t时间下 点的坐标: P0为起点,Pn为终点,Pi为控制点 一阶贝塞尔曲线(线段): 一阶贝塞尔曲线公式 一阶贝塞尔曲线演示 意义:由 P0 至 ...

  8. java 贝塞尔曲线_贝塞尔曲线:原理、自定义贝塞尔曲线View、使用!!!

    一.原理 转自:http://www.2cto.com/kf/201401/275838.html Android动画学习Demo(3) 沿着贝塞尔曲线移动的Property Animation Pr ...

  9. 初识贝塞尔(bezier)曲线

    文章目录 资料援引 贝塞尔曲线的用途 一阶贝塞尔(bezier)曲线 二阶贝塞尔(bezier)曲线 三阶贝塞尔(bezier)曲线 高阶贝塞尔(bezier)曲线 三阶贝塞尔曲线求插值(Slerp) ...

最新文章

  1. 没什么是一次排序解决不了的,如果有,那就One more time
  2. (*长期更新)软考网络工程师学习笔记一—RSA算法详解
  3. linux vmware 安装后无法桥接到物理网卡的解决办法
  4. 从72小时到1分钟,数据如何快速响应业务需求?
  5. 贵阳学python_python学习类
  6. 小程序突然报module is not defined_菲尔德睡前英语小故事 | 狼来了
  7. 计算机一级ps怎么保存,2017年计算机等考一级PS辅导:PS图像格式详细解说
  8. WMB Compute 节点访问数据库
  9. 麦子学院C++学习笔记
  10. 【企业编程题JAVA】烽火通信2018校招软件工程师
  11. pytorch程序调通
  12. Java 获取当前时间前一个小时的时间
  13. MS---数据库概念回顾
  14. 机器学习算法(二十六):文本表示模型
  15. linux 运行菜刀,linux 菜刀
  16. 知识图谱技术入门指引
  17. oracle orion测试工具的使用
  18. 给小仙女讲什么是javascript(一)
  19. 惠普计算机进入安全模式,惠普电脑怎么进安全模式,分享详细的操作教程起来瞧瞧...
  20. Python 通过pytwain 2.0对含TWAIN 驱动的扫描仪设备进行二次开发,支持Python 3

热门文章

  1. 【案例】中国太平保险构建大数据报表平台系统
  2. 计算机网络基础——应用层
  3. Java WEB开发须知知识点---概况篇
  4. 阿里面试官的 说一下从url输入到返回请求的过程 问的难度就是不一样!
  5. 日期选择器(包含上、下午选择及年月日连选)
  6. 2014 ACM/ICPC 北京站 总结
  7. 爬虫训练场项目前端之 Bootstrap 信息提示框,按钮与按钮组,徽章,进度条
  8. DCDC相关故障分析记录
  9. 张三学前端-Promise篇
  10. iPhone 13如何显示电量百分比?详细教程