asaのブログ

プログラミングの勉強まとめ

OpenGL Bezier曲線

 ベジエ曲線の自分のチートペーパーを作成しました。ついでにOpenGLでそれを実装してみました。

 

 まずチートペーパーから

f:id:asa_r:20170827105639j:plain

 

 ベジエ曲線は所与の線を t : ( 1 - t ) に内分し、それをさらに内分して内分して…を繰り返して最終的な点を求めていきます。結果としてtに依存するn次曲線が得られます。各点に与えられる重みを一般化するとBernstein基底関数を得ます。これを元にベジエ曲線は最終的に最後の行の式にまとめられます。ええ、簡潔でいい式です。

 

 一度感覚を掴むと簡単に理解できますが、いまいちピンと来ない時は下のリンクが役に立ちます。曲線が描かれる様子をアニメーションで見ることができるので直感的に理解できます。

blog.sigbus.info

 

 で式が理解できても実装できないとなんの意味もないので少し描いてみました。素直にそのまま書いてみたので、ベジエ曲線ってどんなものだっけと忘れた時に役にたつかもです。

 

 コード

gistf67c50c45b3d50609fd1ac296cae6b17

 

 ベジエ曲線は次のようになります。

f:id:asa_r:20170827111933p:plain

 

 実際の描画点の計算は次のようになっています。t、x、yの順番に出力されています。

 

f:id:asa_r:20170827112108p:plain