如何扩展贝塞尔曲线?

时间:2012-07-26 00:35:41

标签: bezier

我正在使用这段代码来预测[0,1]中s的三次贝塞尔曲线。我想根据几何连续性扩展曲线。我试过设置s而不是[0,1],但结果不正确。实际上是否有可能的算法来计算贝塞尔点?

pb,pbh,peh,pe是三次贝塞尔控制点的向量。

*pq = pb*powf(1-s, 3) + pbh*(3*s*(powf(1-s, 2))) + peh*(3*powf(s, 2)*(1-s)) + pe*powf(s,3);

http://imageshack.us/photo/my-images/217/37013437.jpg/

这是我得到的图像。白色曲线是我想要的。有三条白色贝塞尔曲线相互连接。中间一个是基于我的代码的曲线。延伸曲线(整个白色曲线大约是中心曲线的两倍)是我想要的。但是,如果我只使用范围为[-0.5,1.5]的s的代码构建贝塞尔曲线,我将得到绿色曲线,它甚至不会通过两个原始控制点。

对于绿线的句柄,我使用了以下代码,它也适用于[0,1]中的s。 p123是绿色的新左手柄,p234是新的右手柄。

p12 = (pbh-pb)*s+pb;
p23 = (peh-pbh)*s+pbh;
p34 = (pe-peh)*s+peh;

p123 = (p23-p12)*s+p12;
p234 = (p34-p23)*s+p23;

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您没有任何其他信息,那么您可以获得的最合理的扩展类型实际上是您通过在[0,1]范围之外传递参数 s 获得的扩展。显然,以这种方式延伸的曲线将包含原始曲线,因此当您的绿色曲线不这样做时,控制点的计算必须是有缺陷的。我刚刚将该计算的公式添加到another answer;他们也应该为你工作。

在三段白色曲线中,控制点在连接点周围不对称。这意味着曲线将继续朝着相同的方向(就像它们在一条线上一样),但会突然改变速度( s 被解释为时间)。你不能通过平滑的延续来实现这种形状。因此,上述方法不会为您提供白色形状,除非您提供某种进一步的信息,否则您将无法获得该形状。