2012-08-25 29 views
2

我想通過使用this wikipedia article.中使用的公式來優化貝塞爾曲線實現現在我有一個非常緩慢的實現,但至少它應該是準確的。使用以下:立方bézier曲線問題

p0 = (0, 256) //Violet dot 
p1 = (70, 223) //Green dot 
p2 = (24, 472) //Blue dot 
p3 = (255, 256) //Yellow dot 
t = 0.5 

在T = 0.5下面我當前的代碼,所述點畫出是(67.125,324.625)

enter image description here

試圖式爲X軸,我一個像這樣的計算:

var x = Math.Pow(1 - t, 3) * p0.X + 3 * Math.Pow(1 - t, 2) * t * p1.X + 3 
     * (1 - t) * Math.Pow(t, 2) * p2.X + Math.Pow(t, 3) + p3.X; 

但是,這給了我一個290.375的X座標,這顯然是不正確的。我在這裏錯過了什麼?

+1

'Math.Pow'未針對低整數冪進行優化。通過手動計算功率,您可以獲得顯着的速度提升而不會顯着降低精度。 – harold

+0

感謝您的提示,@harold。這對我來說是新的。 – BlueVoodoo

回答

2

呃!現在看看我自己的問題,我明白了。最後一位Math.Pow(t,3)+ p3.X;應該是Math.Pow(t,3)* p3.X ;.現在它可以工作。