贝塞尔曲线始终会经过起始和结束控制点。
如果曲线的阶数等于样本点的数量,则只会有一条曲线通过所有点(在正常情况下,所有点都不同且它们不位于比低阶曲线上)。
如果曲线的阶数小于样本点的数量,则通常情况下你将无法使曲线通过所有点(在正常情况下)。
如果曲线的阶数高于样本点的数量,则通常情况下你将能够绘制无限数量的曲线。
在
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段,并按上述方式解决每个问题。
如果你发现你没有足够的点数,那么请再次查看链接的
文章 - 你可能正在寻找最平滑的曲线,而文章中有一些建议可以帮助你达到这个目标,因为寻找精确解决方案(最短曲线/最平滑曲线)似乎相当复杂。