贝塞尔路径背后的数学实际上是“只是”:
start⋅(1-t)3 + 3⋅c1⋅t(1-t)2 + 3⋅c2⋅t2(1-t) + end⋅t3
This means that if you know, the start, the end and both control points (c1 and c2), then you can calculate the value for any t (from 0 to 1).
如果值是点(如下图所示),那么您可以分别对 x 和 y 进行这些计算。
这是形式我对贝塞尔路径的解释在这里 http://ronnqvi.st/thinking-like-a-bzier-path/当滑块变化时更新橙色圆圈的代码(在 JavaScript 中)就是这样(翻译成 Objective-C 或简单的 C 应该不会太难,但我太懒了):
var sx = 190; var sy = 80; // start
var ex = 420; var ey = 250; // end
var c1x = -30; var c1y = 350; // control point 1
var c2x = 450; var c2y = -20; // control point 2
var t = (x-minSliderX)/(maxSliderX-minSliderX); // t from 0 to 1
var px = sx*Math.pow(1-t, 3) + 3*c1x*t*Math.pow(1-t, 2) + 3*c2x*Math.pow(t,2)*(1-t) + ex*Math.pow(t, 3);
var py = sy*Math.pow(1-t, 3) + 3*c1y*t*Math.pow(1-t, 2) + 3*c2y*Math.pow(t,2)*(1-t) + ey*Math.pow(t, 3);
// new point is at (px, py)