私は、ポインティング デバイスでペイントしたストロークを記録するアプリケーションに取り組んでいます。
上の画像では、453 個のデータ ポイントを含む 1 つのストロークを描画しています。私の目標は、元のストロークの形状を維持しながら、データ ポイントの量を大幅に削減することです。
興味のある方は、上記のストロークの座標がGitHub の要点として入手できます。
実際のところ、Adobe Illustrator は、私が達成しようとしているものをうまく実装しています。Illustrator で同様のストロークを (カリグラフィ ブラシで) 描画すると、結果の形状は以下のように簡略化されます。ストロークを描くと、私のアプリケーションのものと非常によく似たものになります。マウス ボタンを放すと、曲線は次のように簡略化されます。
ご覧のとおり、ストロークには 14 個のデータ ポイントしかありません。ただし、ベジエ スプライン (または使用しているスプライン) の傾きを定義する追加の制御点があります。ここでは、これらのコントロール ポイントのいくつかを確認できます。
Ramer–Douglas–Peucker algorithm のようなアルゴリズムを見てきましたが、それらは入力セットからポイントを削除するだけのようです。私が間違っていなければ、私が探しているアプローチでは、目的の曲線を実現するためにセットに新しいポイントを導入する必要もあります。
関連していると思われるiPhone のスムーズ スケッチ描画アルゴリズムなどの質問に出くわしました。しかし、それらは入力ポイントの小さなセットから滑らかな曲線を作成することに焦点を当てているようです. 私は逆のケースを持っているように感じます。