点列をベジェ曲線でフィッティングするライブラリをフォークしてTypeScriptで書き直してみた
リポジトリ→ https://github.com/odiak/fit-curve
npm→ @odiak/fit-curve
フォーク元→ https://github.com/soswow/fit-curve
何のライブラリだって??
点(座標)の列から、それによくフィットするベジェ曲線の列を計算するライブラリ
オリジナルのアルゴリズムは、Philip J. Schneiderによる"Algorithm for Automatically Fitting Digitized Curves"
何のために?
Kakeruの線を滑らかにするため
現在はただの点列になっている
ちょっと線が汚くなる→きれいにしたい
フィッティングするとデータを小さくできたりもする
アルゴリズムを理解するため
TypeScriptに変換することでコードのあちこちを見たり触ったりするので少しアルゴリズムのやっていることが分かる
型を入れる時に、型フレンドリーなコードにせざるを得ない
結果としてコードがきれいになる
そして読みやすくなる
[number, number]ではなく{x: number, y: number}の形式で点を突っ込みたかったから
変換するの面倒くさい
実際どうだったか
割と簡単だった
リファクタリングという感じ
無駄にvar使ったり変数の型が途中で変わったりしてたので、必死に解読した
動かしてみると、エラーになった
これは普通にバグっぽかった
フォーク元のバグで、たまに起きるっぽい
別のpaperjs( https://github.com/paperjs/paper.js )のコードを見てみると、対応する処理が少し違ったので直したら動いた
少しだけYarn workspacesとParcelの勉強になった
もうちょっとリファクタしつつもうちょっとアルゴリズムを理解したい