Canvas基础篇:二次贝塞尔曲线与三次贝塞尔曲线的对比

前言

在之前的文章中,我们分别讲解了Canvas中的二次贝塞尔曲线和三次贝塞尔曲线,这两者都是创建平滑曲线的重要工具。但它们在数学原理、形状特性和应用场景上既有联系又有区别,本文将详细解析两者的异同,并通过实际案例展示它们的应用方法。

基本概念与数学表达式

二次贝塞尔曲线

二次贝塞尔曲线通过三个点来定义的一条曲线,这三个点分别代表起始点P1、控制点C1 和终点P2,其本质是一个二元一次方程,其参数方程如下:
B ( t ) = ( 1 − t ) 2 P 1 + 2 t ( 1 − t ) C 1 ​ + t 2 P 2 ​​,其中 t ∈ [ 0 , 1 ] 。 B(t)=(1−t)^2 P_1 + 2t(1−t) C_1​ + t^2 P_2​​,其中t∈[0,1]。 B(t)=(1t)2P1+2t(1t)C1+t2P2​​,其中t[0,1]
将其展开为极坐标形式如下:
x ( t ) = ( 1 − t ) 2 x 1 ​ + 2 t ( 1 − t ) c x 1 ​ + t 2 x 2 x(t) = (1−t)^2 x_1​ + 2t(1−t) cx_1 ​+ t^2 x_2 x(t)=(1t)2x1+2t(1t)cx1+t2x2
y ( t ) = ( 1 − t ) 2 y 1 ​ + 2 t ( 1 − t ) c y 1 ​ + t 2 y 2 y(t) = (1−t)^2 y_1 ​+ 2t(1−t) cy_1 ​+ t^2 y_2 y(t)=(1t)2y1+2t(1t)cy1+t2y2
在Canvas中,使用quadraticCurveTo() 方法绘制二次贝塞尔曲线,其语法如下:

quadraticCurveTo(cx1, cy1, x2, y2)

参数分别为控制点坐标和终点坐标,其曲线示例如下:
二次贝塞尔曲线示例

三次贝塞尔曲线

三次贝塞尔曲线通过四个点来定义的一条曲线,这四个点分别代表起始点P1、控制点C1、控制点C2 和终点P2,其本质是一个三元一次方程,其参数方程如下:
B ( t ) = ( 1 − t ) 3 P 1 ​ + 3 t ( 1 − t ) 2 C 1 ​ + 3 t 2 ( 1 − t ) C 2 + t 3 P 2 ​​,其中 t ∈ [ 0 , 1 ] 。 B(t)=(1−t)^3 P_1​ + 3t (1−t)^2 C_1​ + 3t^2 (1−t) C2 + t^3 P_2​​,其中t∈[0,1]。 B(t)=(1t)3P1+3t(1t)2C1+3t2(1t)C2+t3P2​​,其中t[0,1]
将其展开为极坐标形式如下:
x ( t ) = ( 1 − t ) 3 x 1 ​ + 3 t ( 1 − t ) 2 c x 1 ​ + 3 t 2 ( 1 − t ) c x 2 + t 3 x 2 ​​ x(t) = (1−t)^3 x_1​ + 3t (1−t)^2 cx_1​ + 3t^2 (1−t) cx_2 + t^3 x_2​​ x(t)=(1t)3x1+3t(1t)2cx1+3t2(1t)cx2+t3x2​​
y ( t ) = ( 1 − t ) 3 y 1 ​ + 3 t ( 1 − t ) 2 c y 1 ​ + 3 t 2 ( 1 − t ) c y 2 + t 3 y 2 ​​ y(t) = (1−t)^3 y_1​ + 3t (1−t)^2 cy_1​ + 3t^2 (1−t) cy_2 + t^3 y_2​​ y(t)=(1t)3y1+3t(1t)2cy1+3t2(1t)cy2+t3y2​​
在Canvas中,使用quadraticCurveTo() 方法绘制三次贝塞尔曲线,其语法如下:

bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2)

参数分别为控制点C1坐标、控制点C2坐标和终点坐标,其曲线示例如下:
三次贝塞尔曲线示例

核心异同点对比

相同点

  1. 平滑特性:均能生成连续平滑的曲线,无棱角突变​。
  2. 控制点作用:通过调整控制点位置改变曲线形状​。
  3. 参数连续性:在 Canvas中均需先通过moveTo()确定起点​。
  4. 应用场景:均适用于图形绘制、动画路径、界面交互动效

不同点

特性二次贝塞尔曲线三次贝塞尔曲线
控制点数量1 个控制点2 个控制点
方程次数一元二次方程(抛物线)一元三次方程(双曲率)
形状复杂度单一弯曲方向(无拐点)可包含拐点(曲线弯曲方向改变)
曲率变化单调变化可出现曲率极值点
Canvas方法quadraticCurveTo()bezierCurveTo()
应用场景简单抛物线场景复杂形状构建

选择策略与最佳实践

  1. 简单形状优先二次曲线:当只需单一弯曲(如抛物线、简单圆弧替代)时,选择二次曲线,减少计算开销​。
  2. 复杂形状必用三次曲线:涉及拐点、双曲率变化(如 S 形、螺旋线近似)时,必须使用三次曲线​。
  3. 性能考量:二次曲线计算速度约比三次曲线快 30%,在高频渲染场景(如游戏帧更新)需优先考虑。

结语

二次贝塞尔曲线与三次贝塞尔曲线如同绘图工具箱中的 “螺丝刀” 与 “扳手”,前者擅长简单抛物线场景,后者专精于复杂曲线构建。理解两者的数学本质(控制点数量决定自由度)和视觉特性(拐点存在与否),能帮助我们在实际项目中做出最优选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值