t、 0 <= t <= 1 でパラメータ化された 2d ベジェ曲線上の変曲点 (曲率が変化する点) を決定する必要があります (存在する場合)。私の最初の方法は、曲線に沿ってサンプリングし、二次導関数を評価して、導関数の符号が変化する点を見つけることでした。
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でベジェの 2 次導関数を評価するメソッドですが、ベジェ曲線はベクトル値関数であるため、導関数は 2D ベクトル (2D ベクトル クラスである std::vector ではありません) として返されます。ベクトルの「符号が変わる場所」を解釈する方法がわかりません。基本的に、上記のスニペットで isNegative または isPositive を記述する方法がわかりません。
2D ベジエ曲線の変曲点を見つける他の方法はありますか?
ベジエは任意の程度になる可能性があるため、この問題の閉じた形式の解決策を決定できるとは思いませんが、ここで間違っている場合は修正してください。