逆向工程贝塞尔曲线

时间:2010-06-13 16:28:21

标签: algorithm language-agnostic math bezier

鉴于bézier curve上有一些样本点,是否有可能找出这些点可能存在的可能曲线集?

在我的特定应用程序中,曲线可能有一组有限的端点,所以我想生成一组可能的曲线,枚举所有曲线并挑选出可能以有效终点结束的所有曲线。< / p>

有些人要求提供更多细节。 我知道有一组点在quadratic贝塞尔曲线上,我想计算曲线的公式并能够推断出曲线上的新点。

1 个答案:

答案 0 :(得分:5)

贝塞尔曲线将始终通过起点和终点控制点。

如果曲线的程度等于采样点的数量,则只有一条曲线将通过所有点(在正常情况下,所有点都不同,并且它们不在于bezier曲线程度较小)。

如果曲线的度数小于采样点的数量那么,在一般情况下,您将无法使曲线通过所有点(在正常情况下)。

如果曲线的程度高于采样点的数量,那么在一般情况下,您将能够绘制无限数量的曲线。

wiki article中你只能找到对控制点的引用,但我仍然相信我能正确记住上述属性,并且它们也适用于曲线上的点。

我认为你需要重新定义你的问题并准确定义你需要什么类型的曲线(以及程度)。同样,格奥尔格指出,你可能正在寻找路径 - 曲线的组合。

修改: 首先,校正曲线定义为度数加上一个控制点点(二次需要三个)。控制点与曲线上的点不同 - 对于曲线和二次曲线上的三个点,您可以使用无数个解(对于二次曲线和四个点,请参见this

至于解决方案(但仍然假设您正在查看单条曲线):

对于单二次曲线的等式,您有

B(t) = (1-t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2

上面的大写字母是向量,P0对应于起始控制点(第一个点),P2对应于结束控制点(最后一个点),所以你仍然需要找到P1。变量t是标量,范围从0到1.

如果使用2D曲线,上面的矢量方程为曲线上的每个点提供了两个标量方程。

仍然有一个未知的,所以你应该多取2个点(总共4个),这将给你4个未知数(t为第一个点,t为第二个点,x和y为P1,中间控制点) )和4个方程式求解(每个样本点2个)。

用你最喜欢的数值方法解决这个问题,然后你就会得到这些点来自的原始曲线。

如果您仍然认为可以获得更多曲线并且您必须选择某些内容,那么您不会使用贝塞尔曲线,而是使用bezier splines(从多个曲线连接在一起的意义上)。仍然采用相同的原则,如果你找到一种方法从上面的方程式解决单个曲线(如果你有足够的点),那么你可以将问题分成实际贝塞尔曲线的n段,并如上所述解决每个。

如果事实证明你没有足够的分数,那么再次查看链接的article - 你可能正在寻找最平滑的曲线,文章中有一些关于如何到达那里的建议对于精确解(最短曲线/最平滑曲线)似乎相当复杂。