• 初识贝塞尔(bezier)曲线



    资料援引

    B站视频:wow,神奇的贝塞尔曲线!

    博客:贝塞尔曲线简单介绍

    知乎:曲线篇: 贝塞尔曲线


    贝塞尔曲线的用途

    • 基于对汽车的的车身结构进行流体化设计而诞生
    • 处理视频状态点之间的图像变化
    • 随心所欲绘制曲线,比如:

    在这里插入图片描述

    在这里插入图片描述


    一阶贝塞尔(bezier)曲线

    在这里插入图片描述

    如上, P 0 P_0 P0 P 1 P_1 P1 两点构成了一条线段,而我们可以通过一个函数——线性插值(lerp),来根据一个 t t t 值( t ∈ [ 0 , 1 ] t \in [0,1] t[0,1] 得到线段上一点 P P P(图中一直在滑动的点)。而 P P P 的运动轨迹(红线),便是一阶贝塞尔线段(曲线)。线性插值的数学形式(一阶贝塞尔曲线公式)为:

    P = l e r p ( P 0 , P 1 , t ) = ( 1 − t ) P 0 + t P 1 P=lerp(P_0,P_1,t)=(1-t)P_0 + tP_1 P=lerp(P0P1t)=(1t)P0+tP1

    一阶贝塞尔曲线有两个端点 P 0 P_0 P0 P 1 P_1 P1 ),0个控制点


    二阶贝塞尔(bezier)曲线

    在这里插入图片描述

    如上,假设现在有点 P 2 P_2 P2 ,它与 P 1 P_1 P1 构成了新的线段,我们得到两个 一阶插值点( Q 1 Q_1 Q1 Q 2 Q_2 Q2,它们构成了绿色线段,值得注意的是,两个插值点具有相同的 t t t 值。

    而此时我们在绿色线段上生成一个 二阶插值点( P P P,并让它具有 与两个一阶插值点相同的 t t t 值。 那么该点的运动轨迹就是 二阶贝塞尔曲线。其公式推导为:

    • 绿色线段左端点的运动轨迹:

    Q 1 = ( 1 − t ) P 0 + t P 1 Q_1 = (1-t)P_0 + tP_1 Q1=(1t)P0+tP1

    • 绿色线段右端点的运动轨迹:

    Q 2 = ( 1 − t ) P 1 + t P 2 Q_2 = (1-t)P_1 + tP_2 Q2=(1t)P1+tP2

    • 二阶贝塞尔曲线公式:

    P = ( 1 − t ) Q 1 + t Q 2 P = (1-t)Q_1 + tQ_2 P=(1t)Q1+tQ2
    = ( 1 − t ) ( ( 1 − t ) P 0 + t P 1 ) + t ( ( 1 − t ) P 1 + t P 2 ) =(1-t)((1-t)P_0 + tP_1) + t((1-t)P_1 + tP_2) =(1t)((1t)P0+tP1)+t((1t)P1+tP2)
    = ( 1 − t ) 2 P 0 + 2 t ( t − 1 ) P 1 + t 2 P 2 =(1-t)^2P_0+2t(t-1)P_1+t^2P_2 =(1t)2P0+2t(t1)P1+t2P2

    二阶贝塞尔曲线有两个端点 P 0 P_0 P0 P 2 P_2 P2),一个控制点 P 1 P_1 P1)。


    三阶贝塞尔(bezier)曲线

    在这里插入图片描述

    经过对一阶、二阶贝塞尔曲线的研究学习,我们能知道贝塞尔曲线通过在两点之间再采点的方式实现降阶,每一次选点都是一次的降阶。

    • P 0 P_0 P0 P 1 P_1 P1 P 2 P_2 P2 P 3 P_3 P3 通过生成插值点 Q 1 Q_1 Q1 Q 2 Q_2 Q2 Q 3 Q_3 Q3 来构成二阶贝塞尔(绿色线段)
    • 在此基础上生成插值点 O 1 O_1 O1 O 2 O_2 O2 来构成一阶贝塞尔(蓝色线段)
    • 之后以 O 1 O_1 O1 O 2 O_2 O2 上的插值点 P P P 的运动轨迹来生成三阶贝塞尔曲线。

    公式推导过程同二阶贝塞尔曲线,因此不做赘述,直接贴出公式:

    P = ( 1 − t ) 3 P 0 + 3 t ( 1 − t ) 2 P 1 + 3 t 2 ( 1 − t ) P 2 + t 3 P 3 P=(1-t)^3P_0+3t(1-t)^2P_1+3t^2(1-t)P_2+t^3P_3 P=(1t)3P0+3t(1t)2P1+3t2(1t)P2+t3P3

    三阶贝塞尔曲线有两个端点 P 0 P_0 P0 P 3 P_3 P3),两个控制点 P 1 P_1 P1 P 2 P_2 P2)。


    高阶贝塞尔(bezier)曲线

    • 四阶贝塞尔曲线示意图:

    在这里插入图片描述

    • 五阶贝塞尔曲线示意图:

    在这里插入图片描述

    • 高阶贝塞尔曲线公式:

    P ( t ) = ∑ i = 0 n P i B i , n ( t ) , t ∈ [ 0 , 1 ] P(t)=\sum_{i=0}^{n}P_iB_{i,n}(t),t \in [0,1] P(t)=i=0nPiBi,n(t)t[0,1]

    B i , n ( t ) = C n i t i ( 1 − t ) n − i = n ! i ! ( n − i ) ! t i ( 1 − t ) n − i ,【 i = 0 , 1 , . . . , n 】 B_{i,n}(t)=C_n^it^i(1-t)^{n-i}=\frac{n!}{i!(n-i)!}t^i(1-t)^{n-i},【i=0,1,...,n】 Bi,n(t)=Cniti(1t)ni=i!(ni)!n!ti(1t)ni,【i=0,1,...,n

  • 相关阅读:
    深入了解JVM之⭐《优化JIT》⭐
    vue3定时器的清除
    华为OD机试 - 螺旋数字矩阵
    C#8.0本质论第五章--方法和参数
    LiteIDE主题定制教程
    Linux从 全栈开发 centOS 7 到 运维
    Redux和React-redux(详解和案例)
    业界中说的快速原型法是什么
    WebRtc系列
    java装修设计管理系统设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/Jormungand_V/article/details/125885941