二次贝塞尔曲线:为任何给定的 y 计算 x

Quadratic Bezier Curve: Calculate x for any given y

我有一个二次贝塞尔曲线,由以下等式表示(用 x 代替 t),其中 x 在 0-1 之间

var y = p0 * Math.pow(x, 2) + p1 * 2 * x * (1 - x) + p2 * Math.pow((1 - x), 2)

我想传入一个已知的y值,沿着曲线求解x。

我尝试重新排列二次方程来求解 x,但我得到的值都不在 0-1 范围内。

y = p0 * Math.pow(x, 2) + p1 * 2 * x * (1 - x) + p2 * Math.pow((1 - x), 2)

=> y = p0x^2 + 2p1(x-x^2) + p2(1-2x+x^2)
=> y = p0x2 + 2p1x - 2p1x2 +p2 - 2p2x + p2x2
=> y = p0x2 + p2x2  - 2p1x2 + 2p1x - 2p2x + p2
=> y = (p0+p2-2p1)x^2 + 2(p1 - p2)x + p2
=> 0 = (p0+p2-2p1)x^2 + 2(p1 - p2)x + (p2 - y)

这是一个简单的二次方程,通过输入 p0、p1、p2 和 y 进一步求解,您将得到 x.. x 总是会有两个答案 .. 丢弃消极的一个积极的答案将是你的答案