用Python动画来展示二阶贝赛尔曲线

2020-06-19 00:00:00 坐标 曲线 轨迹 线段 塞尔

说起来贝氏曲线,我们可能首先会想到下面这个男人:

图1. 一位不愿透露姓名的英国球员

但实际上我们说的不是这个叫贝克汉姆的英国男人,而是另外一个人,就是下面这个叫“皮埃尔·贝塞尔”(Pierre Bézier)的法国男人:

图2. 皮埃尔·贝塞尔

贝塞尔论起知名度,也许不如小贝,但说起对人类的贡献,那可是杠杠的,的“贝塞尔曲线”就出自他之手。1962年,贝塞尔发表了贝塞尔曲线的相关理论研究,当时在雷诺公司工作的他,主要运用贝塞尔曲线进行汽车设计。说到这里可能还是有很多人没明白贝塞尔曲线到底是什么,看一下下面这个图,大家就明白了。

图3. 设计中用到的贝赛尔曲线

在Photoshop等多种设计软件中,画曲线时主要用到的是就是贝赛尔曲线,就是类似于上图中的这个曲线,设计师们可以通过控制中间的控制点来画出自己需要的曲线。早先设计师们想要用电脑画出一条直线灰常简单,但要画出一条平滑的曲线却非常难,而贝塞尔曲线的诞生,让大家用电脑绘制出一条平滑曲线成为了现实,这也就是贝塞尔曲线的大用途。

而今天我们就来说一下简单的二阶贝塞尔曲线的推导,并用matplotlib进行展示。(实际上简单的是一阶,但因为其只有一条直线,所以没有什么实际用途,就忽略了)

我们先来了解一下二阶贝赛尔曲线的原理。假如连在一起的两条线段AB和BC,如下图:

图4. 二阶贝赛尔曲线原理图 1

现在AB上取一点D,BC上取一点E,使得AD/AB=BE/BC,如下图:

图5. 二阶贝赛尔曲线原理图 2

而在线段DE上还要求一点F,使得DF/DE=AD/AB=BE/BC,如下图:

图6. 二阶贝赛尔曲线原理图 3

而当D在AB上不断移动,E在BC上不断移动,形成的F点的轨迹便是一条曲线,这条曲线就是二阶贝塞尔曲线。这就是今天我们要推导并演示的曲线。

下面直接用Python代码来展示一下。首先还是导入各种包:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

相关文章