2010-07-03 30 views
0

現在我正在用貝塞爾手柄創建多邊形。它的工作很好,但現在我總是做這樣的事情:我該如何做立方貝塞爾?

for(float i = 0; i < 1; i += 0.04) 
{ 
    interpolate A, a.handle to B.handle, B at time i 
} 

問題是,無論多麼短的距離或長點A和B之間的距離,它總是產生點是相同的。我怎麼能這樣做,所以它總是看起來不錯,但只能插入儘可能多的內容。例如:如果距離(A,B)是40,那麼它只能細分15次,但如果距離(A,B)是20,它可能只能細分7次等等。我怎麼能做到這一點作爲質量函數:

float GetThreshold(float distance, float quality) 
{ 
} 

或類似的東西。 謝謝

+0

「我該怎麼做......」 - 你可以提供一些更好的技巧...... – adf88 2010-07-03 08:41:27

回答

4

你可能想要調查的是自適應步進算法。

基本概念是,你需要更多曲率半徑較小的點(即 - 急轉彎),以及曲率半徑較大(即更直的)點較少的點。

有一篇很棒的文章here,顯示了一個很好的自適應步進算法。幾年前我用它做了一些比較曲線的工作。