桥梁、弦艺术和Bézier曲线


耶路撒冷弦桥

建造以色列耶路撒冷弦桥是为了该城市的轻轨列车系统。然而,它的设计不仅仅将实用考虑在内,它还是一件艺术作品,被设计成一座丰碑。其美丽不仅在于其纵横交错的缆线的视觉外观,而且还在于它背后的数学。让我们深入研究一下桥和桥背后的故事。

弦桥的晚景

弦桥通常是悬索桥,它的整体重量由上方承担。在这种情况下,桥面由多条强大的钢索连接到一个单一的塔。缆线以下列方式连接:塔顶的缆线支撑桥梁的中心,底部的那些缆线支撑更远部分的受力,因为这个原因我们看到缆线相互交叉。

从下面看弦桥

尽管这些缆线给出了一条条离散直线,但我们注意到一个明显的特点:缆线边缘的轮廓似乎惊人的光滑。我们不禁要问它服从某些数学公式吗?

为了找出边缘形成的形状,我们将着手为桥梁制定一个数学模型。由于建筑本身是相当复杂的,它具有弯曲的桥面和一个由两部分组成的斜塔,我们将不得不提出一些简化模型。虽然我们失去了一点点的准确度和精密度,但我们获得了数学的简单性,并且仍然可以捕捉到弦桥形式的美丽本质。更重要的是,我们还能够将我们的简化模型结果推广到实际的桥梁结构上去。

这就是建模的核心---抓住现实世界中的重要特征,并把它们转化为数学。

桥弦分析

让我们先建立一个坐标系(x, y),x-轴对应于桥基,$y$-轴对于将桥挂起的塔。

图1:坐标轴叠加在桥上

把塔取成y-轴从0到1的部分,桥面取成x-轴从0到1的部分,然后我们在每根轴画上有均匀间距的n个标志。从x-轴上的每个标志,我们画一条直线到y-轴,使得x-轴上的第1个标记和y-轴上的第$n$个标志相连,x-轴上的第2个标记和y-轴上的第$n-1$个标志相连,等等。这些线代表我们的桥弦。我们还假设x-轴和y-轴直角相交。这不是一个完美的现实画面,缆线没有均匀分布,塔和桥面也不垂直,但这一假设简化了分析。

图2:坐标轴和均匀间隔的弦

桥弦形成的轮廓基本上是出于缆线和它们相邻缆线的交叉点:你用一条直线把每个交叉点及它后面的交叉点相连。弦越多,轮廓越光滑。因此,众多的弦引导出了被称为包络线的平滑曲线,当有充分多条弦存在时你会看到非常漂亮的轮廓。

放弃详细计算(你可以在这里找到),我们发现这条曲线上所有点的坐标具有下面的形式

$(x, y) = (t^2, (1-t)^2), $

其中$t$在$0$和$1$之间。因此,

$y(x) = (1 - \sqrt{x})^2. $

我们会问:这是它吗?形状是以这样一个数学关系出现吗?事实上,不是!虽然起初不容易看到,但我们都要证明其数学关系实际上是一个抛物线方程!对此你可能会说,一个抛物线的方程是:

$y = ax^2 + bx + c, $

它与我们上面得到的结果非常不同。你说得不错,然而,花一点功夫就可以证明我们的抛物线的论断,如果我们定义$R = x + y$和$S = x - y$,我们就能把我们不熟悉的方程改写为

$R(S) = \dfrac{S^2}{2} + \dfrac{1}{2}. $

这个形式就是我们熟知的抛物线方程。通过用$S$和$R$取代变量$x$和$y$,我们实际上已经将坐标系旋转了45度。但这个新的坐标系吓不住我们。正如我们可以看到的,抛物线的方程都是一样的。

图3:上:抛物线$R(S)= S^2/2 + 1/2$。左下:倾斜45度的同样的抛物线。右下:将左图中x和y在0和1之间的正方形中的倾斜抛物线放大,这就是代表了桥的区域。

我们得到的结果是,缆线的轮廓基本上是抛物线,这让我们很满意,因为抛物线有一个简单而优雅的形状。但它也使我们有点纳闷。为什么如此简单?为什么是抛物线,而不是一些其它的曲线?如果我们改变桥的形状,比方说使塔更倾斜一些,它会如何影响我们的曲线?有什么方法对之前用的简化假设做出修改呢?

一个不太可能的答案

我们的问题答案源于一个令人惊讶的领域:汽车设计。早在20世纪60年代,工程师Pierre Bézier使用特殊的曲线指定他的汽车零部件看起来的形状。这些曲线称为Bézier曲线。现在看看它们能给我们提供什么样的启发。

我们都知道,任何两点间只有一条直线,因此,我们可以只用两个点定义一条特定的线。类似地,Bézier曲线可以由任何数量的称为控制点的点来定义。不像直线那样,它不通过所有的这些点,而是始于第一点,结束于最后那个点,但不一定通过所有的其它点。相反,其它的点充当“砝码”,引导曲线从初始点流到最后点。

需要指出的是,给定的总点数是有特定意义的。点的个数用来定义曲线的次数。一条两点线性Bézier曲线有次数1,它就是通常的直线;三点的二次Bézier曲线有次数2,为抛物线;一般地,一个次数为$n$的曲线有$n + 1$个控制点。

图4:次数为1,2和3的Bézier曲线

Bézier曲线构造的一个可视化好方法是想象有一支铅笔,它从第一个控制点开始绘制到最后一个控制点。在其途中,铅笔被吸引到不同的控制点,但在移动过程中铅笔的被吸引度不断变化。起初前几个控制点最吸引它,所以铅笔开始绘制时是朝着它们的方向走。随着铅笔的向前移动,它越来越被后面的控制点吸引,直到它到达最后一点。在我们画线的任何给定时刻,我们可以问:“铅笔已经画了曲线的百分之几了?”这个百分比被称为曲线参数,并以$t$标记。

图5:绘制Bézier曲线

这一切又如何涉及到我们的抛物线型桥?当我们看到如何绘制Bézier曲线时,就会揭示这样的联系。绘制的方式之一是按照曲线坐标的数学公式。我们将跳过这种方式(你可以在这里看到这个公式),而转到第二种方法:递归地构造Bézier曲线。在这个方法中,为了构建一个次数为$n$的曲线,我们使用两个次数为$n-1$的曲线。下面我们用一个例子来说明它。

假设我们有一条三次曲线。它由四个点$P_0, \; P_1, \; P_2, \; P_3$定义。从这些我们建立两个新的点组:除最后点之外的所有点,或者除了第一点以外的所有点。因此我们有:

  • 第一组: $\; \;P_0, \; P_1, \; P_2;$
  • 第二组: $\; \;P_1, \; P_2, \; P_3.$

这两组中的每一个定义了一条二次Bézier曲线。还记得我们如何讲到使用铅笔,从第一点移动到最后一点。现在,假设你有两支铅笔同时画这两条二次曲线。第一条将从$P_0$开始,收于$P_2$,而第二条始于$P_1$而终于$P_3$。在两支铅笔行走的任何给定时刻,你可以用一条直线连接他们的位置。

因此,在这两支笔画的时候,想到第三支铅笔。这支铅笔总是在前两支铅笔当前位置连接线上的某个地方,并以和其他两支笔同样的速度移动。开始时它是在$P_0$和$P_1$的连线上,因为前两支铅笔才移动了曲线的$0\%$,第三支铅笔沿着这条线的$0\%$处,故在$P_0$点。当其他两支铅笔走了比方说曲线的$36\%$,分别位于点$Q_0$和$Q_1$,第三支铅笔是在$Q_0$和$Q_1$连线中标志为$36\%$的那个点。当其他两支铅笔已经完成了他们$100\%$的旅程,分别在点$P_2$和$P_3$处,第三铅笔是在$P_2$和$P_3$连线上的$100\%$处,即在$P_3$点。

图6:用二次曲线构造一条三次Bézier曲线。红色和绿色的曲线是二次曲线,而粗的黑色曲线是三次曲线 - 这是我们要构建的曲线。点$Q_0$和$Q_1$沿着两条二次曲线走,而我们的绘图铅笔总是沿着连接$Q_0$和$Q_1$的蓝线走。

一个很好的问题是:刚才我们描述了如何构造一条$n$次曲线,但这样做需要绘制$n-1$次曲线。我们如何知道该怎样做呢?幸运的是,我们可以对这些助理曲线应用完全相同的过程。我们将从两条次数较小的曲线把它们构造出来。重复此过程,我们最终完成曲线的绘制。这是线性一次曲线,即仅仅是一条直线,画它没有任何问题。因此,所有复杂的Bézier曲线可以通过很多直线的组合绘制而成。

应用Bézier曲线

现在我们有点熟悉Bézier曲线了,那么可以回到原来的问题:什么原因使桥的形状成为抛物线?我们怎样才能扩展我们的模型,以减弱我们所提出的假设?

事实证明,美丽的弦桥只是一条二次Bézier曲线!要看到这一点,让我们回到代表桥梁的坐标系统,绘制对应调整三个点$P_0, P_1, P_3$的坐标之间的间距,使之一致。使用我们的递归过程,这条二次曲线将由两条直线形成:从$P_0$到$P_1$的直线(从$1$下降到$0$的$y$-轴)和从$P_1$到$P_2$的直线(从$0$增加到$1$的$x$-轴)。

现在假设第一支铅笔已沿$y$-轴下降距离$t$到达点$(0, 1-t)$。与此同时,第二支铅笔沿着$x$-轴达到点$(0, t)$。因此,第三支铅笔将在从点$(0, 1-t)$到点$(0, t)$的线$L_t$上的$100 \times t\%$的位置。因此,Bézier曲线与所有$t$属于$0$和$1$之间的线$L_t$相遇。这些线(或至少它们当中的$n$条)对应于我们的桥弦。

图7:红色箭头代表t=0.5时t沿轴走过的距离,蓝线是线$L_{0.5}$。

现在设$t = 0.5$,我们则看到线$L_{0.5}$的中点$P = (0.25, 0.25)$位于Bézier曲线上。图8显示$P$点还位于所有$L_t$形成的轮廓上(如果这张图不使你信服,请看这里的网页)。这足以表明,Bézier曲线和轮廓线是相同的曲线。如图8所示,任何其它与$L_t$相遇的抛物线将错过点$P$并穿越线$L_{0.5}$两次。

图8:蓝线代表$L_t$的一部分。红线是$L_{0.5}$。绿色曲线表明除轮廓线外的任何抛物型线都不会碰到P点

欣赏这一事实将使我们能够处理先前模型的一些不准确之处。首先,我们曾经假设轴之间互相垂直,即塔和桥面之间实际上有一个角度。现在我们看到,这并不重要。如果我们将y-轴(以及任何其他在x-轴和y-轴之间从原点(0, 0)辐射出的线)反时针旋转一个所需的角度以增加轴之间的角度,刚才使用的论点依然有效。我们知道,任何二次Bézier曲线是一条抛物线,桥梁轮廓因而仍然是一条抛物线。其次,我们看到,在我们的模型中弦是否均匀分布无关紧要:它们只是其轮廓定义Bézier曲线的直线族$L_t$的一些代表罢了。第三,由塔而来的桥弦不跨越它的整个长度,在大约一半处终止。这意味着,我们只看到部分Bézier曲线。如果向前延长桥面,我们仍将有一条抛物线满足$P_2 = (2, 0)$。然后桥弦的轮廓是抛物线的一部分,并跨越到$(0, 1)$。

图9:用于弦桥的正确Bézier曲线

知道了抛物线形状的弦桥轮廓的根本原因后,现在我们可以稍休息一下。某种意义上说,20世纪60年代用于汽车零部件设计的曲线已经潜入到21世纪的桥梁设计之中!

Bézier曲线无处不在

Bézier曲线的妙处远远不仅仅体现在汽车和桥梁上。它进入了更多的领域和并有着广泛的应用。其中的一个领域是弦艺术,这时弦线在充满钉子的板上散布着。虽然弦只能作直线,它们中的许多以不同的角度排列而生成Bézier曲线轮廓,就像桥弦所为。

图10:由弦组成的一艘船和模式

Bézier曲线的另一个有趣之处表现在计算机图形学。在许多图像处理程序中,我们常常用画笔工具绘制Bézier曲线。更重要的是,许多计算机的字体是用Bézier曲线定义的。每个字母由多达几十个的控制点来定义,并使用一系列三次到五次的Bézier曲线绘制。这使得字母有可伸缩性:不管你如何放大或缩小这些字母,它们都能被清楚地呈现,见下图。

图11:一些在FreeSerif字体(简体)中用来形成“a”和“g”的Bézier控制点

这就是数学之美。它出现的地方我们从未期望,它可将看上去完全无关的领域美妙地连接起来。考虑到曲线最初用于汽车零部件设计的事实,现在又被用来设计桥梁,我们再次感到这是数学跨学科性质的一个真正展示。

原文链接: http://plus.maths.org/content/bridges-string-art-and-bezier-curves
作  者: Renan Gross
翻  译: 丁玖,密执安州立大学博士,南密西西比大学数学教授
校  对: 汤涛,香港浸会大学数学讲座教授