在开始这个问题之前,我使用 P0、P1、P2 和 P3 来表示四个三次贝塞尔点,并使用“t”,因为它是参数化的。另外,我在这个站点以及谷歌中搜索过类似的问题,但找不到。如果这是一个常见问题,我深表歉意。
问题:在这两种情况下,三次贝塞尔曲线的 dx/dt 和 dy/dt 的斜率均为 0
1: t = 0 and P0 == P1
2: t = 1 and P2 == P3
这是一个示例来说明 (1),其中 t = 0 且 P0 == P1。
求下列三次贝塞尔曲线在 t = 0 处的切线(即 dx/dt 和 dy/dt):
(100, 100) (100, 100) (150, 150) (200, 100)
为了求切线,我们需要三次贝塞尔曲线的一阶导数:
Cubic Bezier definition
B(t) = (1-t)^3P0 + 3t(1-t)^2P1 + 3t^2(1-t)P2 + t^3P3
First derivative of a bezier curve (if you'd like to see the steps I used to get here, let me know)
B'(t) = (-3P0 + 9P1 - 9P2 + 3P3)t^2 + (6P0 - 12P1 + 6P2)t + (-3P0 + 3P1)
将 t = 0 代入一阶导数方程,我们得到
B'(0) = -3P0 + 3P1
最后,回想一下 P0 = P1 = (100, 100),所以 dx/dt 和 dy/dt 是:
dx/dt = dy/dt = -3*(100) + 3*(100) = 0
这告诉我......对于这个三次贝塞尔曲线,在 t = 0 处没有切线。如果您要绘制图表并查看它,这是没有意义的。
为了得到非零斜率,我所做的是:将点 P1、P2 和 P3 视为二次贝塞尔曲线,将它们转换为等效的三次贝塞尔曲线,然后在 t = 0 处找到一阶导数。有没有我可以避免这样做吗?我发现很难接受 dx/dt 和 dy/dt 为 0 的切线。谢谢你的帮助。