Add project files.
This commit is contained in:
37
Assets/Cryville/Common/Math/ColumnVector.cs
Normal file
37
Assets/Cryville/Common/Math/ColumnVector.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
namespace Cryville.Common.Math {
|
||||
public class ColumnVector<T> {
|
||||
readonly T[] content;
|
||||
public int Size {
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
public ColumnVector(int size) {
|
||||
content = new T[size];
|
||||
Size = size;
|
||||
}
|
||||
public ColumnVector(T[] c) {
|
||||
Size = c.Length;
|
||||
content = c;
|
||||
}
|
||||
public T this[int i] {
|
||||
get {
|
||||
return content[i];
|
||||
}
|
||||
set {
|
||||
content[i] = value;
|
||||
}
|
||||
}
|
||||
public T Dot(ColumnVector<float> lhs, IVectorOperator<T> o) {
|
||||
T res = default(T);
|
||||
for (var i = 0; i < Size; i++)
|
||||
res = o.Add(res, o.ScalarMultiply(lhs[i], content[i]));
|
||||
return res;
|
||||
}
|
||||
public static ColumnVector<float> WithPolynomialCoefficients(int size, float num) {
|
||||
var m = new ColumnVector<float>(size);
|
||||
for (var i = 0; i < size; i++)
|
||||
m[i] = (float)System.Math.Pow(num, i);
|
||||
return m;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/Cryville/Common/Math/ColumnVector.cs.meta
Normal file
12
Assets/Cryville/Common/Math/ColumnVector.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b99c66d83f1330841a0c5a23e87bf873
|
||||
timeCreated: 1616406828
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
6
Assets/Cryville/Common/Math/IVectorOperator.cs
Normal file
6
Assets/Cryville/Common/Math/IVectorOperator.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Cryville.Common.Math {
|
||||
public interface IVectorOperator<T> {
|
||||
T Add(T lhs, T rhs);
|
||||
T ScalarMultiply(float lhs, T rhs);
|
||||
}
|
||||
}
|
12
Assets/Cryville/Common/Math/IVectorOperator.cs.meta
Normal file
12
Assets/Cryville/Common/Math/IVectorOperator.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6bd0295c670699c49b6f0944832387a9
|
||||
timeCreated: 1616379780
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
63
Assets/Cryville/Common/Math/SquareMatrix.cs
Normal file
63
Assets/Cryville/Common/Math/SquareMatrix.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
namespace Cryville.Common.Math {
|
||||
public class SquareMatrix {
|
||||
readonly float[,] content;
|
||||
public int Size {
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
public SquareMatrix(int size) {
|
||||
content = new float[size, size];
|
||||
Size = size;
|
||||
}
|
||||
public float this[int r, int c] {
|
||||
get { return content[r, c]; }
|
||||
set { content[r, c] = value; }
|
||||
}
|
||||
public ColumnVector<T> Eliminate<T>(ColumnVector<T> v, IVectorOperator<T> o) {
|
||||
int s = Size;
|
||||
float[,] d = (float[,])content.Clone();
|
||||
int[] refl = new int[s];
|
||||
for (int i = 0; i < s; i++)
|
||||
refl[i] = i;
|
||||
for (int r = 0; r < s; r++) {
|
||||
for (int r0 = r; r0 < s; r0++)
|
||||
if (d[refl[r0], r] != 0) {
|
||||
refl[r] = r0;
|
||||
refl[r0] = r;
|
||||
break;
|
||||
}
|
||||
int or = refl[r];
|
||||
float sf0 = d[or, r];
|
||||
for (int c0 = r; c0 < s; c0++)
|
||||
d[or, c0] /= sf0;
|
||||
v[or] = o.ScalarMultiply(1 / sf0, v[or]);
|
||||
for (int r1 = r + 1; r1 < s; r1++) {
|
||||
int or1 = refl[r1];
|
||||
float sf1 = d[or1, r];
|
||||
for (int c1 = r; c1 < s; c1++)
|
||||
d[or1, c1] -= d[or, c1] * sf1;
|
||||
v[or1] = o.Add(v[or1], o.ScalarMultiply(-sf1, v[or]));
|
||||
}
|
||||
}
|
||||
T[] res = new T[s];
|
||||
for (int r2 = s - 1; r2 >= 0; r2--) {
|
||||
var v2 = v[refl[r2]];
|
||||
for (int c2 = r2 + 1; c2 < s; c2++)
|
||||
v2 = o.Add(v2, o.ScalarMultiply(-d[refl[r2], c2], res[refl[c2]]));
|
||||
res[refl[r2]] = v2;
|
||||
}
|
||||
return new ColumnVector<T>(res);
|
||||
}
|
||||
public static SquareMatrix WithPolynomialCoefficients(int size) {
|
||||
var m = new SquareMatrix(size);
|
||||
for (var r = 0; r < size; r++) {
|
||||
int d = 1;
|
||||
for (var c = 0; c < size; c++) {
|
||||
m[r, c] = d;
|
||||
d *= r;
|
||||
}
|
||||
}
|
||||
return m;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/Cryville/Common/Math/SquareMatrix.cs.meta
Normal file
12
Assets/Cryville/Common/Math/SquareMatrix.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bceea65ebaa5052409eb85086645232e
|
||||
timeCreated: 1616377102
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user