Ported LinearTriangulate
This commit is contained in:
parent
f479cfc8fa
commit
b56a010725
@ -1,3 +1,5 @@
|
|||||||
|
using Vector3 = UnityEngine.Vector3;
|
||||||
|
|
||||||
public class Matrix {
|
public class Matrix {
|
||||||
private readonly uint rows = 0;
|
private readonly uint rows = 0;
|
||||||
private readonly uint cols = 0;
|
private readonly uint cols = 0;
|
||||||
@ -114,6 +116,28 @@ public class Matrix {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Vector3 MultiplyMatrixVector3(float[,] A, Vector3 v) {
|
||||||
|
return new Vector3() {
|
||||||
|
x = A[0, 0] * v.x + A[0, 1] * v.y + A[0, 2] * v.z,
|
||||||
|
y = A[1, 0] * v.x + A[1, 1] * v.y + A[1, 2] * v.z,
|
||||||
|
z = A[2, 0] * v.x + A[2, 1] * v.y + A[2, 2] * v.z
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static float[,] MultiplyMatrixScalar(float[,] A, float s) {
|
||||||
|
int rows = A.GetLength(0);
|
||||||
|
int cols = A.GetLength(1);
|
||||||
|
float[,] result = new float[rows, cols];
|
||||||
|
|
||||||
|
for (int i = 0; i < rows; i++) {
|
||||||
|
for (int j = 0; j < cols; j++) {
|
||||||
|
result[i, j] += A[i, j] * s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static float[] GetColumn(float[,] M, int col) {
|
public static float[] GetColumn(float[,] M, int col) {
|
||||||
int rows = M.GetLength(0);
|
int rows = M.GetLength(0);
|
||||||
float[] column = new float[rows];
|
float[] column = new float[rows];
|
||||||
@ -123,6 +147,21 @@ public class Matrix {
|
|||||||
return column;
|
return column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Vector3 GetRow3(float[,] M, int rowIx) {
|
||||||
|
int cols = M.GetLength(1);
|
||||||
|
Vector3 row = new();
|
||||||
|
row.x = M[rowIx, 0];
|
||||||
|
row.y = M[rowIx, 1];
|
||||||
|
row.z = M[rowIx, 2];
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetRow3(float[,] M, int rowIx, Vector3 v) {
|
||||||
|
M[rowIx, 0] = v.x;
|
||||||
|
M[rowIx, 1] = v.y;
|
||||||
|
M[rowIx, 2] = v.z;
|
||||||
|
}
|
||||||
|
|
||||||
public static float Dot(float[] a, float[] b) {
|
public static float Dot(float[] a, float[] b) {
|
||||||
float sum = 0;
|
float sum = 0;
|
||||||
for (int i = 0; i < a.Length; i++) sum += a[i] * b[i];
|
for (int i = 0; i < a.Length; i++) sum += a[i] * b[i];
|
||||||
@ -134,4 +173,5 @@ public class Matrix {
|
|||||||
for (int i = 0; i < size; i++) I[i, i] = 1.0f;
|
for (int i = 0; i < size; i++) I[i, i] = 1.0f;
|
||||||
return I;
|
return I;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user