三次方贝塞尔曲线是否完全包含在控制点的边界框中?

Is a cubic Bézier curve completely contained by the bounding box of its control points?

本文关键字:控制 包含 边界 三次 方贝塞 是否 曲线      更新时间:2023-10-16

可能是一个非常简单的问题(我只是想确保我是对的)。标题不是100%正确,但下面是我需要的:

我想计算三次贝塞尔曲线的边界框(矩形)。我知道包含曲线控制点的矩形并不是真正的边界框,它很可能更大,但我想确保它不能更小,也就是说,它将始终包含曲线。

我有由多条连续的三次贝塞尔曲线定义的样条曲线,我想有它的边界框,或者最接近它的东西(我不喜欢复杂的公式来计算它,但如果有一些不太复杂的编码方法,我很乐意知道)。

澄清:我所说的"包含曲线控制点的矩形"是指这样计算的矩形:我将控制点的最小X和最小Y坐标作为矩形的左上角,控制点的最大X和最大Y坐标作为长方形的右下角。(Y轴从上到下)。然后我想确保曲线确实位于这个矩形内。

希望你能理解我的意思:)

说维基百科:

Bézier曲线在计算机图形学中被广泛用于对平滑曲线进行建模。由于曲线完全包含在其控制点的凸包中,

是的。

是的,这是一个安全的假设(忽略任何精度问题)。

次-nBezier曲线(我们称之为A)可以表示为二次-(n-1)Bezier曲线的线性插值(我们称它们为BC。如果BC在边界框内,那么A显然也是如此。但是你可以递归地应用它BC都可以表示为二阶-(n-2)曲线的线性插值,依此类推。基本情况是递归到一阶曲线,这只是控制点本身的线性插值。

简短回答:是。

对于具有控制点B0、B1、B2和B3的三次Bézier曲线,沿着曲线B(t)的每个点通过以下公式计算:

B0*(1-t)^3 + B1*3*(1-t)^2*t + B2*3*(1-t)*t^2 + B3*t^3

重要的是,如果我们观察这些系数,它们都大于或等于0,它们的总和是

(1-t)^3 + 3*(1-t)^2*t + 3*(1-t)*t^2 + t^3 = 1

在数学中,这被称为凸组合。沿着Bézier曲线的每个点都是控制点的凸组合。所有凸组合的集合称为凸包,因此曲线以控制点的凸包为界。凸包不包含比最高控制点更高的任何东西,也不包含比左est控制点更左的东西,等等。找到控制点的最小值和最大值x和y就足以找到包含Bézier样条曲线的矩形。

顺便说一句,关于点是控制点的凸组合的观点对于所有的Bézier曲线都是正确的,但对于这个问题,你只需要关心三次曲线。