现在我正在创建带有贝塞尔手柄的多边形。它运作良好,除了现在我总是做这样的事情:
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次等。我怎么能做到这一点作为质量的函数ex :
float GetThreshold(float distance, float quality)
{
}
或类似的东西。 感谢
答案 0 :(得分:4)
您可能想要研究的是自适应步进算法。
基本概念是你需要更多的曲率半径较小的点(即锐角),以及曲率半径较大的点(即更直的)。
有一篇很棒的文章here,它展示了一个很好的自适应步进算法。几年前我用它做了一些我正在做的bezier曲线工作。