反向工程贝塞尔曲线

3
给定一些贝塞尔曲线上的样本点,能否找出这些点可能位于的曲线集合?
在我的具体应用中,曲线可能具有有限的端点集,因此我想生成可能的曲线集合,枚举所有这些曲线并挑选出可能以有效端点结束的所有曲线。
有些人要求更多细节。我有一组点,我知道它们在一个二次贝塞尔曲线上,我想计算出曲线的公式,并能够推断曲线上的新点。

使用单个贝塞尔曲线拟合点...当然可以做到(与使用函数拟合点的方式相同 - 贝塞尔曲线“是”一个函数),您提供的链接已经讨论了使用贝塞尔曲线进行拟合。 - ShinTakezou
是的,但我想知道这些点可能位于哪些曲线上。从第一个点开始到最后一个点结束的曲线只是众多曲线中的一条。 - Martin
使用二次贝塞尔曲线时,您要么只有一条曲线,要么少于四个点通过该曲线。而且,如果您有超过四个独立点,则将无法找到一条单一的二次贝塞尔曲线,可以通过所有这些点。 - Unreason
1个回答

7
贝塞尔曲线始终会经过起始和结束控制点。
如果曲线的阶数等于样本点的数量,则只会有一条曲线通过所有点(在正常情况下,所有点都不同且它们不位于比低阶曲线上)。
如果曲线的阶数小于样本点的数量,则通常情况下你将无法使曲线通过所有点(在正常情况下)。
如果曲线的阶数高于样本点的数量,则通常情况下你将能够绘制无限数量的曲线。
wiki article中,你只会找到关于控制点的参考资料,但我仍然相信我记得上述属性是正确的,并且它们也适用于曲线上的点。
我认为你需要重新定义你的问题并明确定义你需要哪种类型的曲线(以及哪个阶数)。此外,正如乔治所指出的,你可能正在寻找路径 - 曲线的组合。

编辑: 首先进行更正 - 曲线是由度数加一的控制点定义的(二次曲线需要三个)。控制点与曲线上的点不同 - 对于曲线上的三个点和二次曲线,您可以有无限多的解决方案(参见 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个)。
使用您喜欢的数值方法解决它,您将获得原始曲线,其中包含这些点。
如果您仍然认为可以获得更多曲线,并且必须选择某些内容,则您不是在使用贝塞尔曲线,而是使用贝塞尔样条(在多条曲线连接在一起的意义上)。仍然适用同样的原则,如果您找到了一种从上述方程中解决单个曲线的方法(并且如果您有足够的点),则可以将问题分成实际贝塞尔曲线的n段,并按上述方式解决每个问题。
如果你发现你没有足够的点数,那么请再次查看链接的文章 - 你可能正在寻找最平滑的曲线,而文章中有一些建议可以帮助你达到这个目标,因为寻找精确解决方案(最短曲线/最平滑曲线)似乎相当复杂。

我根据你的要求在问题中添加了一些额外的内容 :) - Martin
我在我提供的答案中添加了一点额外的内容 :) - Unreason
谢谢,这看起来很不错。我会在接下来的几天尝试一下。 - Martin
如果我需要增加控制点,方程式会如何改变?假设我们现在有3个控制点,如果涉及到具有4个控制点的贝塞尔曲线,那么问题中的点会发生什么变化? - Rana Tallal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接