gpt4 book ai didi

c++ - 寻找二维贝塞尔曲线的拐点

转载 作者:行者123 更新时间:2023-11-28 00:55:44 26 4
gpt4 key购买 nike

我需要确定二维贝塞尔曲线上的拐点(曲率变化的点),由 t 参数化,0 <= t <= 1,如果他们存在。我最初的方法是沿曲线采样,评估二阶导数并找到导数符号变化的点。

2DVector curvature1, curvature2;
for (double t = 0, t <= 1.0; t += STEP) {
curvature1 = bezier.CurvatureAt(t);
curvature2 = bezier.CurvatureAt(t + (STEP/2.0 >= 1.0 ? 0 : t + STEP/2.0));
if (isNegative(curvature1) ? isPositive(curvature2) : isNegative(curvature2)) {
inflection_point = t;
}
}

其中 CurvatureAt() 是一种计算贝塞尔曲线在 t 处的二阶导数的方法,但由于贝塞尔曲线是 vector 值函数,导数作为二维 vector 返回(不是标准: :vector,一个二维 vector 类)。我不知道如何解释 vector 的“符号变化位置”。基本上我不知道如何在上面的代码片段中写 isNegative 或 isPositive。

还有其他方法可以找到二维贝塞尔曲线的拐点吗?

我认为不可能确定此问题的封闭形式解决方案,因为贝塞尔曲线可以是任意度数,但是如果我在这里错了,请纠正我。

最佳答案

曲率与二阶导数有关但不同。

参数曲线的有符号曲率 P(t) = (x(t), y(t)) 实际上是一个数字,定义为:

k(t) = (x'y'' - x''y') / (x' * x' + y' * y')^(3/2)

如果您使用此公式,您的原始想法应该可行。

关于c++ - 寻找二维贝塞尔曲线的拐点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11465703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com