【发布时间】:2017-10-16 04:29:58
【问题描述】:
我正在尝试编写一个以曲率作为优化参数之一的遗传算法。我想根据贝塞尔曲线的控制点计算曲率。我有一个想要优化的最小曲率半径。我一直在参考这篇论文: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 是的,这就是我的想法,我正在研究的论文使用了这个功能。
标签: bezier