1

假设我有一个带有两个固定端点的贝塞尔曲线,一个在(左下角和右上角) 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) 处。(这假设一个“从左上角”坐标系)

这是我们曲线的一个小例子:

我们的贝塞尔曲线

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


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

4

1 回答 1

5

您有函数的三次方程,X(t)曲线参数Y(t)在哪里(曲线上点的范围)。在伯恩斯坦多项式基础中(曲线定义的常用形式):t0..1

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
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

有了Y值,我们可以找到相应t的参数 - 注意 range 中可能有 0 到 3 个可能的根0..1。以功率为基础的 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
于 2021-03-24T07:15:31.940 回答