使用三次贝塞尔曲线作为直线:控制点必须位于何处才能获得 t 的等距间距

Qua*_*ndo 4 math geometry bezier

当三次贝塞尔曲线的两个控制点都位于曲线两个端点之间的线上时,生成的曲线将是直线。在我的情况下,问题是我得到的不同 t 曲线上点的实际间距根据控制点在该线上的位置而有所不同。

如果我使用 p1 和 p2 之间的 lerp 计算两个控制点的位置,如下所示:

controlPoint1 = endPoint1.lerp(endPoint2,a);
controlPoint2 = endPoint1.lerp(endPoint2,b);
Run Code Online (Sandbox Code Playgroud)

必须有 a,b 的一种配置,其中间距实际上是等距的。我尝试了 0.25/0.75、0.3333/0.6666、0.5/0.5,但这些似乎都没有削减它。

Aki*_*nen 5

我相信 [0, 1/3, 2/3, 1] =[a, b, c, d] 是正确的答案。

至少用这些值递归二分法

e = a*(1-t)+b*t, f=b*(1-t)+c*t, g=c*(1-t)+d*t,  
h = e*(1-t)+f*t, i=f*(1-t)+g*t,  
j = h*(1-t)+i*t,  
Run Code Online (Sandbox Code Playgroud)

为所有值给出 j=t。