1

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 ベジエ曲線の変曲点を見つける他の方法はありますか?

ベジエは任意の程度になる可能性があるため、この問題の閉じた形式の解決策を決定できるとは思いませんが、ここで間違っている場合は修正してください。

4

3 に答える 3

1

ベジェの変曲点を決定するには、ベジェのパラメトリック方程式の1次導関数と2次導関数の外積がゼロになる間隔(0、1)[もちろん端点を除く]の1つまたは複数の時間を見つけます。つまり、f'Xf''=0です。

これは、このページやこのペーパーのp4などのさまざまな情報源に記載されています。

于 2012-09-17T18:31:51.773 に答える
0

そのようなループは必要ないと思います。このページによると、ベジェ曲線の曲率はいつでも計算できます。ベジェ曲線には多項式があるため、曲率の符号がいつ変化するかを簡単に計算できます。

于 2012-07-13T10:50:34.633 に答える