我有这些点的起点和终点以及曲线斜率的值。 现在我必须绘制一个平滑的2D贝塞尔曲线"通过两个给定点。 现在如何定位两个控制点来实现这一目标。有什么办法吗?我知道控制点必须位于相应起点和终点的切线上。
答案 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形成的控制多边形是凸的,那么你的三次贝塞尔曲线应该是平滑的并且没有转弯。