【開発】Luaで行列計算色々を作成する

1. 目的

普段私は趣味のゲームでLua言語を使用するのだが、Luaには行列計算のライブラリが存在しない。困るのでLua言語で行列計算を作成する。

2. 開発内容

以下の計算を実施するための関数を作成する。
基本的に3×3以外必要ないので3×3を基本とする。

  • 足し算
  • 引き算
  • 掛け算
  • 転置行列
  • 行列

あと、趣味用に角度を回転行列に変換するための関数も作っておく。オイラー角を用いてローカル座標を絶対座標に変換するとき等、自機の傾きを補正するときとかに使う。

3. 開発

統合したソースコードを記載しておく。間違ってる可能性が否定できないが、実際に手計算も行って適切な値が出力されているかを確認したことは明記しておく。尚、今回は手打ちであり、AIは使わなかった。 コードの右上に「C」とあるが、Luaである。

現在は積、足し算は実装されているが、それ以外はまだ作っていない。必要になったときに個人的に作成し、追加していく。

a = {
  1,2,3,
  4,5,6,
  7,8,9
}--This is a A-matrix, please enter the original matrix to calculate.

b = {
  1,2,3,
  4,5,6,
  7,8,9
}--This is a B-matrix, please enter the original matrix to calculate.

o = {}--This is a matrix outputted.

function add(a, b)
  for i = 1, 9 do
    o[i] = a[i] + b[i]
  end
end

Function subtraction(a,b)
 For i =1, 9 do
o[i] = a[i] - b[i]
  end
end 

function multiplication(a,b)
  o[1]=(a[1]*b[1])+(a[2]*b[4])+(a[3]*b[7])
  o[2]=(a[1]*b[2])+(a[2]*b[5])+(a[3]*b[8])
  o[3]=(a[1]*b[3])+(a[2]*b[6])+(a[3]*b[9])
  o[4]=(a[4]*b[1])+(a[5]*b[4])+(a[6]*b[7])
  o[5]=(a[4]*b[2])+(a[5]*b[5])+(a[6]*b[8])
  o[6]=(a[4]*b[3])+(a[5]*b[6])+(a[6]*b[9])
  o[7]=(a[7]*b[1])+(a[8]*b[4])+(a[9]*b[7])
  o[8]=(a[7]*b[2])+(a[8]*b[5])+(a[9]*b[8])
  o[9]=(a[7]*b[3])+(a[8]*b[6])+(a[9]*b[9])
end

尚、積計算「multiplication」はfor等を使用し幾分かスマートに作れるが、使用する環境上ベタ打ちのほうが計算時間が早いのでこうする。

4. 最後に

Luaは非常に軽い言語であるため、ゲーム開発等に使われることもある。C言語の面倒くさいと感じる部分が排されている為に、C言語学習者であればすぐに習得できるだろう。実生活においてLuaを使用しなければならない環境はほとんどないので、Pythonを使うべき。
今回のプログラムは初心者の練習レベルとしても基礎レベルだが、逆数を求めての割り算等は非常に複雑な計算を行わなければならない為、やりがいがあるだろう。

Back to top