問題を書き換えてみる
3次ベジェ曲線の位置ベクトルを とすると、 は以下のようになります。
は3次ベジェ曲線のパラメータで とします。
式 は の 成分をそれぞれ としました。
式 を見てわかる通り と を入れ替えると式が同じなので、以降 についてのみ考えることにします。
また、 を と書くことにします。
式 を変形します。
式 の導出の過程で、 とおきました。
点列 を作成します。 は以下のように定義します。
式 で、 の両方の値を参照して 次元の距離を用いていることに注意してください。
以上より、問題は以下のように書き直すことができます。
「 が与えられたとき、それらに当てはまる曲線 を求めよ。」
これは、いわゆる「線形回帰」の問題であることが分かります。
最小二乗法で解く
目的関数 を定義します。
ここで、 とおくと、式 は以下のように書き直せます。
を で微分して とおきます。
式 の導出については、曲線フィッティング - 最小二乗法 の記事を参考にしてください。
正則化する場合は、リッジ回帰(L2正則化) の記事を参考にしてください。
式 で求めた は、 です。
についても同様に、点列 から式 を用いて を求めます。
以上より、3次ベジェ曲線の4つの制御点の位置ベクトル が求まりました。
弧長パラメータの更新
式 を見てわかる通り、 は点列の弧長パラメータです。
これを曲線のパラメータとみなして、最小二乗法で3次ベジェ曲線を求めたわけです。
今度は、この求めた3次ベジェ曲線の幾何的な性質を用いて、 更新します。
点 から曲線へ下した垂線と曲線の交点が であるとき、以下の式が成り立ちます。
式 を満たすような を求めるのですが、解析に解くのは困難なのでニュートン法で解きます。
式を簡単にするため、 とおくと、式 は以下のように書けます。
式 をニュートン法で解くには、
と を更新すればよいです。
を計算します。
式 を式 に代入します。
式 を用いて全ての を更新します。(ニュートン法は普通複数回行いますが、ここは1回でよいと思います。)
この時 となる可能性があります。それは本記事では問題ありませんが、念のため記載しておきます。
その後、式 を用いて3次ベジェ曲線を更新するのですが、その時に誤差関数 の値が必ず小さくなるわけではないので注意しましょう。
ですので、以下に示すような最大誤差や平均二乗平方根誤差で、3次ベジェ曲線を更新するかどうか決定したほうが良いと思います。
最大誤差と平均二乗平方根誤差
とおくと、最大誤差 は以下のようになります。
とおくと、式 は以下のように書けます。
最大誤差 の大小のみを比較するのなら、式 の平方根は不要ですし、式 のノルムは2乗してもよいと思います。
平均二乗平方根誤差 とは、「誤差の二乗の平均の平方根」の事なので以下のようになります。
とおくと、式 は以下のように書けます。
平均二乗平方根誤差 の大小のみを比較するのなら、式 の や平方根は不要ですし、式 の も不要でノルムは2乗してもよいと思います。