2010-07-03 90 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,显示了一个很好的自适应步进算法。几年前我用它做了一些比较曲线的工作。