後面的貝塞爾曲線的數學居然是 「公正」:
start⋅(1-T) +3⋅c ⋅t(1-T) +3⋅c ⋅t2(1-T)+end⋅t
這意味着如果您知道,開始,結束和兩個控制點(c 和c ),則可以計算任意t(從0到1)的值。
它的值是點(如下圖),那麼你可以分別爲x和y做這些計算。
這是形式my explanation of Bézier paths here並更新橙色的圓爲滑塊改變(在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)
嗨,openfrog。就「CGPath/CGPathRef」而言,它意味着什麼「不透明」?我想,你不是在談論「不透明」。考慮到我知道控制點,開始點和結束點,我嘗試在CGPath上獲取點的問題同樣存在。 – Unheilig