是否可以根据x值得到三次贝塞尔曲线的y值?

Is it possible to get the y value of a cubic bezier curve based on the x value?

我正在使用贝塞尔曲线来表示音频的波形数据。然后我想在 x 坐标处对波进行采样并获取 y 坐标,以便我可以将其转换为 PCM 数据。现在,由于贝塞尔曲线是用参数方程表示的,这可能会带来问题,因为可能有多个 y 值和 x 值,但是对于我要采样的曲线,我可以保证它们满足函数的标准,只是它们仍然表示为参数韵律上。所以我的问题是,有没有一种方法可以根据 x 值直接对 y 值进行采样?如果不是,最好的方法是什么?我现在最好的想法是沿着曲线移动,直到我达到所需的 x 值,然后使用该 y 值,但这感觉缓慢且效率低下。谢谢。

是的,这是可能的,但有点复杂。您必须在给定的 x 处求解 t,然后根据 t 计算 y。这可以用 newton-raphson 方法近似。 link 更好地解释了如何实现它:http://greweb.me/2012/02/bezier-curve-based-easing-functions-from-concept-to-implementation/

另一种选择是使用显式贝塞尔曲线,而不是参数贝塞尔曲线。明确表示 y 是 x 的函数(即 y=f(x))。与参数方程相反,其中 x 和 y 都是 t 的函数(即 x=f(t) 和 y=f(t))。只要控制点的 x 值均匀分布,曲线就是显式的,您可以假设 x=t.

编辑:我应该指出,我对等距 x 坐标的陈述意味着 x=t 是一种过度简化。如果 x 坐标在 0 和 1 之间均匀分布,则为真。否则,您需要将 x 坐标转换为 0 和 1 之间的值。例如,如果 x 坐标均匀分布且位于 3、4、5, 6 那么 t = (x - 3) / (6 - 3)。