なんか、mixiで知らない学生さんからこんな頼み事をされた。
「OpenGL(C言語)の課題を出されたんですけど、わかりません! 教えてください!」
しかも、「今週の水曜日までにお願いします!」という期限付きw
普通の人なら怒るか無視するけど、私はお人好しなのでちょっとアドバイスしてあげた。
ちなみに、その課題とは以下のようなもの。
・適当に直方体の領域を作る
・その内部で適当に跳ねまわる球体を複数個配置する
・初期位置は領域内、初速は適当に設定してよい。重力方向、重力加速度も適当でいい。
・球体と外壁、球体間の接触判定を行い、適切に跳ねかえるようなプログラムを作成する。
・球体の数を動的に増やせるようにする。同時接触が起こった時の挙動がちゃんと動くプログラムであること。
なんというか、OpenGLというより高校物理の問題ですなこれは。
運動量保存則と反発係数の式を使えば楽勝です。(ただ、ちょっと面倒なのはめり込んだボールを引き離す処理ですね)
で、ちょっと面白そうだったのでちゃちゃっと作ってキャプチャしてみました。
http://screencast.com/t/VLewd0EpM0i
(キャプチャソフトの仕様でカクカクしてますが、実際はもっとなめらかです)
この課題、学生用に球体に限定しているので簡単なんですが、これが一般形状だったら、本格的な剛体物理シミュレーションが必要になってきますね。
作ったソースコード、今すぐその学生さんにあげちゃうと勉強にならないので、課題の締め切りが過ぎた後に見せてあげる予定です。
まぁ、こういう学生さん、非常識ではあるけど、こういう無鉄砲さというか、なりふり構わず、という姿勢は実は嫌いじゃないです。
スティーブ・ジョブズとか、こういうなりふり構わず、身もふたもない行動で成功をつかみ取っていますからね。まぁ、周りにすごい迷惑はかけますけどw