三阶贝塞尔曲线被广泛用于各种需要平滑曲线的设计领域,一般通过多段三阶贝塞尔曲线顺次连接,构成比较复杂的曲线。
比如下图中,A、B、C和D控制红色曲线,D、E、F和G控制绿色曲线,G、H、I和A控制蓝色曲线。
对于上面红色曲线,我们把A和D称为端点,B和C称为柄点,可以发现端点总是被相邻曲线共用。
每一段三阶贝塞尔曲线均由两个端点和两个柄点,一共四个控制点进行控制,对于其中每个控制点的改变,均会影响这段曲线所有部分。
出于曲线微调的目的,在柄点B的移动过程中,只改变端点A到点E的那一段曲线(E点的位置固定起来),而对于点E到端点D的部分则维持不变。
这样的情况下,就需要分拆这段贝塞尔曲线为两段,端点A到点E为一段,点E到端点D为一段,然后再单独修改端点A到点E的那段曲线。
展示一下曲线分开后,单独控制的效果:
我们知道A、B、C和D四个控制点,描述了上面的三阶贝塞尔曲线,那么就有以下两个问题:
第一,分拆后的曲线AE和曲线ED,能否用三阶贝塞尔曲线描述?
第二,如果能够的话,那么曲线AE和曲线ED的控制点在哪里?
对于第一个问题,答案是肯定的。
可以证明曲线AE和曲线ED上的三阶贝塞尔曲线的参数方程,经过对参数变量的变换,可以转换为完整三阶贝塞尔曲线的参数方程(参数变量的取值范围调整到对应的定义域)。其中,曲线AE和曲线ED的三阶贝塞尔曲线的参数方程的参数变量,与完整三阶贝塞尔曲线的参数方程的参数变量,有着确定的函数关系。
那么,下面就针对第二个问题,来寻求解答。
由三阶贝塞尔曲线的参数方程定义
可以将点E定义为t等于特定值e (0<e<1)时的点P(e),也即:
针对三阶贝塞尔曲线的定义,可以作出以下辅助点和辅助线;
根据贝塞尔曲线的特性,可以知道线段AB是贝塞尔曲线在A点的切线段,线段IJ是贝塞尔曲线在E点的切线,线段CD是贝塞尔曲线在D点的切线。
其中F、G、H、I、J是与贝塞尔曲线相关的辅助点,根据三阶贝塞尔曲线的规则,坐标可以定义如下:
另外,E也可以通过I和J来定义,如果进行推算,那么结果和P(e)也是一致的:
经过观察,感觉A、F、I和E很像是曲线AE的贝塞尔曲线控制点的样子,下面就针对这个猜想进行验证:
假设A、F、I和E就是曲线AE的贝塞尔曲线的控制点,那么以u为参数变量的三阶贝塞尔曲线方程可以表达如下:
代入F、I和E的坐标公式,则Q(u)可以转换为如下形式:
经过化简和整理可得:
以自变量t代替ue,则可以定义如下函数:
而曲线AE就是三阶贝塞尔曲线参数方程P(t)定义在t=[0, e]的部分,也即:
R(t)和PAE(t)的定义域和函数方程完全相同,所以可以得知Q(u)就是曲线AE的参数方程,也即A、F、I和E是曲线AE的三阶贝塞尔曲线的控制点,从而可以验证前面的猜想。
对于曲线ED部分,也可以采用相同方式进行证明,这里不再赘述。
从而,控制点ABCD描述的三阶贝塞尔曲线,可以被分解为控制点AFIE描述的贝塞尔曲线和控制点EJHD描述的贝塞尔曲线。
也即,对于三阶贝塞尔参数曲线方程P(t)而言,对于任意0<e<1,均可以将该曲线从P(e)处断开成两个三阶贝塞尔曲线。
例如下图中,取e=0.4,那么该曲线从 P(0.4)处断开为红色和绿色两根贝塞尔曲线。
感谢Grapher和GeoGebra软件,使得方便排版文章中使用的公式和曲线。