我想寫一個遺傳算法與曲率作爲優化參數之一。我想根據貝塞爾曲線的控制點來計算曲率。我有一個我想要優化的最小曲率半徑。我一直在參考這篇論文: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