给定 bézier curve 上的几个样本点, 是否有可能计算出这些点可能位于的一组可能曲线?
在我的特定应用程序中,曲线可能具有一组有限的端点,因此我想生成一组可能的曲线,枚举所有这些曲线并挑选出所有可能以有效端点结束的曲线。
有些人要求提供更多详细信息。 我有一组我知道在 quadratic 上的点贝塞尔曲线,我想计算曲线的公式并能够推断曲线上的新点。
最佳答案
贝塞尔曲线将始终通过起始和结束控制点。
如果曲线的度数等于样本点的数量,那么只有一条曲线会通过你所有的点(在正常情况下,所有的点都不同,它们不在一个次级贝塞尔曲线)。
如果曲线的次数小于样本点的数量,那么一般情况下,你将无法让曲线通过所有的点(在正常情况下)。
如果曲线的阶数大于样本点的数量,那么一般情况下,你将能够绘制出无限多条曲线。
在wiki article您只会找到对控制点的引用,但我仍然相信我正确地记得上述属性并且它们也适用于曲线上的点。
我认为您需要重新定义您的问题并准确定义您需要哪种类型的曲线(以及哪种程度)。正如 Georg 指出的那样,您可能正在寻找路径 - 曲线的组合。
编辑: 首先,校正 - 曲线定义为度数加上一个控制点点(二次需要三个)。控制点与曲线上的点不同 - 对于曲线和二次曲线上的三个点,您可以有无限多的解(参见 this 二次曲线和四个点)
至于解决方案(但仍然假设您正在查看一条曲线):
对于单次二次曲线的方程
B(t) = (1-t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2
上面的大写字母是向量,P0对应起始控制点(第一个点),P2对应结束控制点(最后一个点),所以还需要找到P1。变量 t 是标量,范围从 0 到 1。
如果使用 2D 曲线,上述向量方程为曲线上的每个点给出两个标量方程。
仍然有 t 作为未知数,所以你应该再取 2 个点(总共 4 个),这将为你提供 4 个未知数(第一个点为 t,第二个点为 t,P1 的 x 和 y,中间控制点) 和 4 个方程求解(每个样本点 2 个)。
用您最喜欢的数值方法解决这个问题,您将得到点所在的原始曲线。
如果您仍然认为您可以获得更多曲线并且您必须选择一些东西,那么您不是在使用贝塞尔曲线,而是在使用 bezier splines。 (从某种意义上说,多条曲线连接在一起)。同样的原则仍然适用,如果你想出一种方法来从上面的方程中求解一条曲线(如果你有足够的点),那么你可以把问题分成 n 段实际贝塞尔曲线,并按照上面概述的方法求解每一个。
如果事实证明您没有足够的积分,请查看链接的 article再次 - 您可能正在寻找最平滑的曲线,并且文章中有一些关于如何到达那里的建议,因为寻找精确的解决方案(最短曲线/最平滑曲线)似乎相当复杂。
关于algorithm - 逆向工程贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032996/