いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

ベジェ曲線とは何か

 ベジェ曲線というのを紹介しましょう。これはサインカーブみたいに、見ても「あ、ベジェ曲線だ」と分かるというものではありません。描く手順についた名前と言っていいでしょう。下の図を見てください。ウィキペディアにありました。

f:id:Inuosann:20190808182033p:plain

 今、ゲームで戦闘機が図の左下、Q1→P0と進んできたとします。この後なめらかな曲線(図の中の曲線です)に沿って動かし、最後、P3→Q2と進めたいとしましょう。戦闘機を動かすのはプログラマの仕事です。コンピュータに「適当にうまく動かしてくれ」は通用しません(人工知能じゃないんだから!)。ゲームでは例えば1秒間に60回程度画面を描き換えます。1/60秒ごとに、戦闘機がどこでどっちを向いて飛んでいるのかプログラマが管理しなければならないのです。なお、これから示す手順は手作業では大変すぎて実行できません。ゲームなんだから当然ですが、コンピュータ用の手順ということです。
 さて、例えば上の図で点Q1、点P0を結ぶ線分をQ1P0と書くことにします。Q1P0を適当な長さだけ延長して、点P1を決めます。Q2P3も同じように延長して、P2を決めます。これで線分P0P1、P2P3、P1P2が得られました。ここで各線分を例えば3:5に内分してそれぞれP4、P6、P5を得ます。線分P4P5、P5P6が得られたわけです。この2本を再び3:5に内分して点P7、P8を得ます。最後に線分P7P8を3:5に内分して点P9を得ます。これでようやく曲線上の1点を描けました。今は説明のために3:5という比を使いましたが、実際にはコンピュータ内で0.0001:0.9999、0.0002:0.9998、0.0003:0.9997、……などと小刻みに比を変えてゆき、そのたびごとに点P9の位置を計算し、そこへ戦闘機を移動するのです。膨大な回数、この作業を繰り返せば戦闘機はきれいに曲線に沿って動くわけです。「こんな大変なこと、できるのか?」と思うかも知れませんが、ぼくはプログラミングも趣味で、ゲームを書くとき普通に使っていました。特別の式を考える必要もないですし、計算コストも比例計算でたいしたことはありません。手順が面倒で人間には向かないというだけです。