2017-04-09 46 views
0

我希望沿曲線參數化(即等距)點的弧長。我可以使用de Casteljau和pythagoras來循環它。這在曲線是靜態的時候有效,但如果曲線是動態的,它就會變得不穩定。我也嘗試過三次多項式,與預期的一樣給出了與Casteljau相同的點。在不使用蠻力/查找表的情況下查找bezier的alp點

有沒有辦法改變一個這些函數來有效地獲得alp-points而沒有循環/數組?近似值很好。

float lerp(float A, float B, float C) { 
    return A*(1-C)+B*C; 
} 

float bezierPoint_lerp(float A, float B, float C, float D, float T) { 
    return lerp(lerp(lerp(A, B, T), lerp(B, C, T), T), 
       lerp(lerp(B, C, T), lerp(C, D, T), T), T); 
} 

float bezierPoint_pow(float A, float B, float C, float D, float T) { 
    return A * pow(1-T,3) + 
     B * 3 * pow(1-T,2) * T + 
     C * 3 * (1-T) * pow(T,2) + 
     D * pow(T,3); 
} 
+0

什麼是'alp points'? – MBo

+0

弧長參數化/等距點 – PrincePolka

回答

0

一般來說,你不能弧長重新參數化的曲線象徵,所以最好的辦法是從字面上你的標記點等距離而您正在繪製的曲線。在繪製曲線長度之前計算曲線長度,然後在將曲線的像素繪製到屏幕上時,執行近似距離聚合,並且當您點擊一個「大致距離前一個距離所需距離」的座標時,將其標記爲它自己的清單。在繪製曲線完成時保持這樣做,然後在最後您只有「阿爾卑斯點」所涉及的座標的專用短列表。

相關問題