2006-11-22
テニスゲームの実装(2)
3Dだーっと思って昔の日記から Vector3D の考察を探し出してクラスを書いてみたが、視点固定の擬似3DならX軸回転とスクリーン投影だけでことたりるので Vector3D を使わなくてもシンプルに書けてしまうことに気づいた。
class Vector3D < Array %w(x y z).each_with_index do |e, i| eval "def #{e} ; self[#{i}] ; end" eval "def #{e}=a ; self[#{i}] = a ; end" end %w(+ - * /).each do |e| eval "def #{e}d Vector3D[self[0] #{e} d[0], self[1] #{e} d[1], self[2] #{e} d[2]] end" end end