arXiv探訪

興味の赴くままに数学するだけ

Unityで数値計算ライブラリMath.NET Numericsを使う方法

Math.NETとは行列計算とかできるライブラリらしい。ゲームエンジンであるUnity上で使う用途はあまりないかもしれないが、Win8.1環境で導入できたので手順を以下にメモしとく。

まずNuGetのページでnupackファイルをダウンロードする。

Unityは.NETFrameworkのバージョンが3.5らしいので、Task Parallel Libraryもついでにダウンロードする。

nupackファイルはただのzipファイルらしいので展開する。MathNetはlib/net35に、TaskParallelはlibにあるdllをUnityのAssetsにドラッグ&ドロップする。

二つのdllのInspectorのPlatform settingsをx86_x64, winにする。

スクリプト上では

using MathNet.Numerics;

などを加えて、あとは公式サンプルなど自由にどうぞ。

もっともUnityの関数とは互換性がないので、そこを埋めるには適当に自作する必要はある。

var A = Matrix<double>.Build.DenseOfArray(new double[,]
{
   { 3, 2, -1 },
   { 2, -2, 4 },
   { -1, 0.5, -1 }
});
var b = Vector<double>.Build.Dense(new double[] { 1, -2, 0 });
var x = A.Solve(b);

Vector3 t;

t.x = (float)(x.ToArray())[0];
t.y = (float)(x.ToArray())[1];
t.z = (float)(x.ToArray())[2];

Debug.Log( t ); // (1.0, -2.0, -2.0)

他のdllとかも同じように使えそうね。