Math 给定一条具有固定端点的三次Bezier曲线,当给定要检查的y位置时,如何找到该曲线上点的x位置?

Math 给定一条具有固定端点的三次Bezier曲线,当给定要检查的y位置时,如何找到该曲线上点的x位置?,math,bezier,cubic-bezier,Math,Bezier,Cubic Bezier,假设我有一条具有两个固定端点的贝塞尔曲线,一个在x(0),y(1)处,另一个在x(1),y(0)(左下角和右上角) 现在假设我有两个控制点,它们可以位于x(0)、x(1)、y(0)和y(1)之间的任何位置。对于这个问题,我只想说控制点1在x(0.1)y(0.6)处,控制点2在x(0.9)和y(0.4)处。(假设“从左上角”坐标系) 下面是我们曲线的一个小图示: 现在假设我的y位置是0.7。要计算出y(0.7)点对应的x位置是什么,数学是什么样的?我该怎么做 很抱歉,如果这个问题不属于这里,但

假设我有一条具有两个固定端点的贝塞尔曲线,一个在
x(0),y(1)
处,另一个在
x(1),y(0)
(左下角和右上角) 现在假设我有两个控制点,它们可以位于x(0)、x(1)、y(0)和y(1)之间的任何位置。对于这个问题,我只想说控制点1在x(0.1)y(0.6)处,控制点2在x(0.9)和y(0.4)处。(假设“从左上角”坐标系)

下面是我们曲线的一个小图示:

现在假设我的y位置是0.7。要计算出y(0.7)点对应的x位置是什么,数学是什么样的?我该怎么做



很抱歉,如果这个问题不属于这里,但我认为这是编码中面临的一个常见问题,很可能你们中的许多人都有我想要的答案。

你们有函数的立方方程
X(t)
Y(t)
,其中
t
是曲线参数(曲线上的点的范围
0..1
)。在Bernstein多项式基中(曲线定义的常用形式):

有了
Y
值,我们可以找到相应的
t
参数-注意在
0..1
范围内可能有0到3个可能的根。Y分量在幂基中的表示:

Y(t) = P0.Y*(1-t)^3+3*P1.Y*(1-t)^2*t+3*P2.Y*(1-t)*t^2+P3.Y*t^3 = 
       t^3*(P3Y-3P2Y+3P1Y-P0Y) + t^2*(3P2Y-6P1Y+3P0Y) + t^2*(3P1Y-3P0Y) + (P0Y) = 
       t^3*a + t^2*b + t^2*c + d' = y_position 
最后三次方程是:

t^3*a + t^2*b + t^2*c + d = 0
   where
a = P3.Y-3*P2.Y+3*P1.Y-P0.Y
b = 3*P2.Y-6*P1.Y+3*P0.Y
c = 3*P1.Y-3*P0.Y
d = P0.Y - y_position

 
求解以计算
t
(可能是波浪曲线的一些值)

然后对于给定的
t
计算相应的
X
值:

X(t) = P0.X*(1-t)^3+3*P1.X*(1-t)^2*t+3*P2.X*(1-t)*t^2+P3.X*t^3

对于函数
X(t)
Y(t)
有三次方程,其中
t
是曲线参数(曲线上点的范围
0..1
)。在Bernstein多项式基中(曲线定义的常用形式):

有了
Y
值,我们可以找到相应的
t
参数-注意在
0..1
范围内可能有0到3个可能的根。Y分量在幂基中的表示:

Y(t) = P0.Y*(1-t)^3+3*P1.Y*(1-t)^2*t+3*P2.Y*(1-t)*t^2+P3.Y*t^3 = 
       t^3*(P3Y-3P2Y+3P1Y-P0Y) + t^2*(3P2Y-6P1Y+3P0Y) + t^2*(3P1Y-3P0Y) + (P0Y) = 
       t^3*a + t^2*b + t^2*c + d' = y_position 
最后三次方程是:

t^3*a + t^2*b + t^2*c + d = 0
   where
a = P3.Y-3*P2.Y+3*P1.Y-P0.Y
b = 3*P2.Y-6*P1.Y+3*P0.Y
c = 3*P1.Y-3*P0.Y
d = P0.Y - y_position

 
求解以计算
t
(可能是波浪曲线的一些值)

然后对于给定的
t
计算相应的
X
值:

X(t) = P0.X*(1-t)^3+3*P1.X*(1-t)^2*t+3*P2.X*(1-t)*t^2+P3.X*t^3

这是一个很好的答案,谢谢!这是一个很好的答案,谢谢!