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