我想写一个遗传算法与曲率作为优化参数之一。我想根据贝塞尔曲线的控制点来计算曲率。我有一个我想要优化的最小曲率半径。我一直在参考这篇论文:https://arxiv.org/pdf/1503.01524.pdf给定控制点计算贝塞尔曲线的曲率半径
在这篇文章里有一个函数,它用三角形的边长来得到我已经实现的隐含的曲率半径。这里是我当前的代码:
// Computes the curvature implied by 3 control points of a bezier curve
float curvature(float4 p0, float4 p1, float4 p2) {
// Get the triangle side lengths
float a = distance(p0, p1);
float b = distance(p1, p2);
float c = distance(p2, p0);
// Do the curvature calculation
float num = a * b * c;
float denom = (a + b + c) * (b + c - a) * (a - b + c) * (a + b - c);
return num/sqrt(denom);
}
此函数的结果似乎是不正确的。我为路径中的每个点运行此函数,保存最后两个,然后从所有点中获取最小半径。当我绘制路径时,这个函数的计算和我可以看到的东西之间似乎有很大差异。什么是正确的方法来做到这一点?
编辑: 我正在寻找计算三个控制点之间的曲率半径,而不是在曲线中给定的点,如果这不清楚道歉。
您已经实现的功能似乎不符合参数平面曲线曲率半径的实际函数。 –
@ Mike'Pomax'Kamermans是这就是我在想什么,我正在使用的这篇论文使用了这个函数。 – BlueSpud