平滑三次贝塞尔曲线的条件

时间:2014-09-15 08:53:49

标签: bezier cubic-spline

我有这些点的起点和终点以及曲线斜率的值。 现在我必须绘制一个平滑的2D贝塞尔曲线"通过两个给定点。 现在如何定位两个控制点来实现这一目标。有什么办法吗?我知道控制点必须位于相应起点和终点的切线上。

  • 注意:通过"平滑曲线",我的意思是最终图中不应有陡峭的曲线或转弯。

2 个答案:

答案 0 :(得分:2)

听起来你有catmull-rom曲线坐标(两个点,它们的离开和到达切线),在这种情况下https://pomax.github.io/bezierinfo/#catmullconv涵盖了将这些转换为Bezier坐标所需的所有数学。如果您不关心“如何”,只需跳到本节末尾的直接转换规则。

tl; dr version :将您的坐标重写为Catmull表格:

[P1, v1, v2, P2] -> [P1 - v1, P1, P2, P2 + v2]

然后我们将其转换为贝塞尔坐标:

P1 <= P1
p2 <= P1 - (P2 - P1 - v1) / 6 * f
p3 <= P2 + (P2 + v2 - P1) / 6 * f
p4 <= P2

f是张力常数。玩弄它。它通常是1,但它可能不取决于这些切线的强度。

答案 1 :(得分:0)

对于由P0,P1,P2和P3定义的三次贝塞尔曲线,其中P0和P3是起点和终点,它在t = 0和t = 1时的一阶导数向量

C'(t = 0)= 3 *(P1-P0)
C'(t = 1)= 3 *(P3-P2)

因此,如果您已经知道起点和终点处的斜率,则可以轻松地将其转换为切线向量并找到控制点P1和P2。您需要为一阶导数向量指定适当的幅度,以使最终得到的曲线没有拐点。但只要你确保由P0,P1,P2和P3形成的控制多边形是凸的,那么你的三次贝塞尔曲线应该是平滑的并且没有转弯。