Fix Unity references
This commit is contained in:
parent
2428583110
commit
5059dfbe6e
@ -1,7 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
class Angle
|
namespace Passer.LinearAlgebra {
|
||||||
{
|
|
||||||
public static float Rad2Deg = 360.0f / ((float)Math.PI * 2);
|
public class Angle {
|
||||||
public static float Deg2Rad = ((float)Math.PI * 2) / 360.0f;
|
public const float pi = 3.1415927410125732421875F;
|
||||||
|
public static float Rad2Deg = 360.0f / ((float)Math.PI * 2);
|
||||||
|
public static float Deg2Rad = ((float)Math.PI * 2) / 360.0f;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,11 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using Vector3 = UnityEngine.Vector3;
|
using Passer.LinearAlgebra;
|
||||||
using Vector2 = UnityEngine.Vector2;
|
|
||||||
|
|
||||||
public readonly struct Slice {
|
public readonly struct Slice {
|
||||||
public int start {get;}
|
public int start { get; }
|
||||||
public int stop {get;}
|
public int stop { get; }
|
||||||
public Slice(int start, int stop) {
|
public Slice(int start, int stop) {
|
||||||
this.start = start;
|
this.start = start;
|
||||||
this.stop = stop;
|
this.stop = stop;
|
||||||
@ -50,7 +49,7 @@ public class Matrix2 {
|
|||||||
return new Matrix2(resultData);
|
return new Matrix2(resultData);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix2 SkewMatrix(Vector3 v) {
|
public static Matrix2 SkewMatrix(Vector3Float v) {
|
||||||
float[,] result = new float[3, 3] {
|
float[,] result = new float[3, 3] {
|
||||||
{0, -v.z, v.y},
|
{0, -v.z, v.y},
|
||||||
{v.z, 0, -v.x},
|
{v.z, 0, -v.x},
|
||||||
@ -137,12 +136,12 @@ public class Matrix2 {
|
|||||||
return new Matrix1(result);
|
return new Matrix1(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3 operator *(Matrix2 A, Vector3 v) {
|
public static Vector3Float operator *(Matrix2 A, Vector3Float v) {
|
||||||
return new Vector3() {
|
return new Vector3Float(
|
||||||
x = A.data[0, 0] * v.x + A.data[0, 1] * v.y + A.data[0, 2] * v.z,
|
A.data[0, 0] * v.x + A.data[0, 1] * v.y + A.data[0, 2] * v.z,
|
||||||
y = A.data[1, 0] * v.x + A.data[1, 1] * v.y + A.data[1, 2] * v.z,
|
A.data[1, 0] * v.x + A.data[1, 1] * v.y + A.data[1, 2] * v.z,
|
||||||
z = A.data[2, 0] * v.x + A.data[2, 1] * v.y + A.data[2, 2] * v.z
|
A.data[2, 0] * v.x + A.data[2, 1] * v.y + A.data[2, 2] * v.z
|
||||||
};
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -263,14 +262,14 @@ public class Matrix1 {
|
|||||||
return new Matrix1(magnitude);
|
return new Matrix1(magnitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix1 FromVector2(Vector2 v) {
|
public static Matrix1 FromVector2(Vector2Float v) {
|
||||||
float[] result = new float[2];
|
float[] result = new float[2];
|
||||||
result[0] = v.x;
|
result[0] = v.x;
|
||||||
result[1] = v.y;
|
result[1] = v.y;
|
||||||
return new Matrix1(result);
|
return new Matrix1(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix1 FromVector3(Vector3 v) {
|
public static Matrix1 FromVector3(Vector3Float v) {
|
||||||
float[] result = new float[3];
|
float[] result = new float[3];
|
||||||
result[0] = v.x;
|
result[0] = v.x;
|
||||||
result[1] = v.y;
|
result[1] = v.y;
|
||||||
@ -278,18 +277,18 @@ public class Matrix1 {
|
|||||||
return new Matrix1(result);
|
return new Matrix1(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector2 vector2 {
|
public Vector2Float vector2 {
|
||||||
get {
|
get {
|
||||||
if (this.magnitude != 2)
|
if (this.magnitude != 2)
|
||||||
throw new System.ArgumentException("Matrix1 must be of size 2");
|
throw new System.ArgumentException("Matrix1 must be of size 2");
|
||||||
return new Vector2(this.data[0], this.data[1]);
|
return new Vector2Float(this.data[0], this.data[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public Vector3 vector3 {
|
public Vector3Float vector3 {
|
||||||
get {
|
get {
|
||||||
if (this.magnitude != 3)
|
if (this.magnitude != 3)
|
||||||
throw new System.ArgumentException("Matrix1 must be of size 3");
|
throw new System.ArgumentException("Matrix1 must be of size 3");
|
||||||
return new Vector3(this.data[0], this.data[1], this.data[2]);
|
return new Vector3Float(this.data[0], this.data[1], this.data[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,12 +460,12 @@ public class Matrix {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Vector-matrix multiplication
|
// Vector-matrix multiplication
|
||||||
public static Vector3 MultiplyMatrixVector3(float[,] A, Vector3 v) {
|
public static Vector3Float MultiplyMatrixVector3(float[,] A, Vector3Float v) {
|
||||||
return new Vector3() {
|
return new Vector3Float(
|
||||||
x = A[0, 0] * v.x + A[0, 1] * v.y + A[0, 2] * v.z,
|
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,
|
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
|
A[2, 0] * v.x + A[2, 1] * v.y + A[2, 2] * v.z
|
||||||
};
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float[,] MultiplyMatrixScalar(float[,] A, float s) {
|
public static float[,] MultiplyMatrixScalar(float[,] A, float s) {
|
||||||
@ -492,16 +491,17 @@ public class Matrix {
|
|||||||
return column;
|
return column;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3 GetRow3(float[,] M, int rowIx) {
|
public static Vector3Float GetRow3(float[,] M, int rowIx) {
|
||||||
int cols = M.GetLength(1);
|
int cols = M.GetLength(1);
|
||||||
Vector3 row = new();
|
Vector3Float row = new(
|
||||||
row.x = M[rowIx, 0];
|
M[rowIx, 0],
|
||||||
row.y = M[rowIx, 1];
|
M[rowIx, 1],
|
||||||
row.z = M[rowIx, 2];
|
M[rowIx, 2]
|
||||||
|
);
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SetRow3(float[,] M, int rowIx, Vector3 v) {
|
public static void SetRow3(float[,] M, int rowIx, Vector3Float v) {
|
||||||
M[rowIx, 0] = v.x;
|
M[rowIx, 0] = v.x;
|
||||||
M[rowIx, 1] = v.y;
|
M[rowIx, 1] = v.y;
|
||||||
M[rowIx, 2] = v.z;
|
M[rowIx, 2] = v.z;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace Passer.LinearAlgebra {
|
namespace Passer.LinearAlgebra {
|
||||||
public class Spherical {
|
public class Spherical {
|
||||||
public float distance;
|
public float distance;
|
||||||
@ -17,30 +15,30 @@ namespace Passer.LinearAlgebra {
|
|||||||
this.direction = direction;
|
this.direction = direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Spherical FromVector3(Vector3 v) {
|
public static Spherical FromVector3(Vector3Float v) {
|
||||||
float distance = v.magnitude;
|
float distance = v.magnitude;
|
||||||
if (distance == 0.0f)
|
if (distance == 0.0f)
|
||||||
return new Spherical(distance, 0, 0);
|
return new Spherical(distance, 0, 0);
|
||||||
else {
|
else {
|
||||||
float verticalAngle = (Mathf.PI / 2 - Mathf.Acos(v.y / distance)) * Mathf.Rad2Deg;
|
float verticalAngle = (float)((Angle.pi / 2 - Math.Acos(v.y / distance)) * Angle.Rad2Deg);
|
||||||
float horizontalAngle = Mathf.Atan2(v.x, v.z) * Mathf.Rad2Deg;
|
float horizontalAngle = (float) Math.Atan2(v.x, v.z) * Angle.Rad2Deg;
|
||||||
return new Spherical(distance, horizontalAngle, verticalAngle);
|
return new Spherical(distance, horizontalAngle, verticalAngle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector3 ToVector3() {
|
public Vector3Float ToVector3() {
|
||||||
float verticalRad = (UnityEngine.Mathf.PI / 2) - this.direction.vertical * UnityEngine.Mathf.Deg2Rad;
|
float verticalRad = (Angle.pi / 2) - this.direction.vertical * Angle.Deg2Rad;
|
||||||
float horizontalRad = this.direction.horizontal * UnityEngine.Mathf.Deg2Rad;
|
float horizontalRad = this.direction.horizontal * Angle.Deg2Rad;
|
||||||
float cosVertical = UnityEngine.Mathf.Cos(verticalRad);
|
float cosVertical = (float)Math.Cos(verticalRad);
|
||||||
float sinVertical = UnityEngine.Mathf.Sin(verticalRad);
|
float sinVertical = (float)Math.Sin(verticalRad);
|
||||||
float cosHorizontal = UnityEngine.Mathf.Cos(horizontalRad);
|
float cosHorizontal = (float)Math.Cos(horizontalRad);
|
||||||
float sinHorizontal = UnityEngine.Mathf.Sin(horizontalRad);
|
float sinHorizontal = (float)Math.Sin(horizontalRad);
|
||||||
|
|
||||||
float x = this.distance * sinVertical * sinHorizontal;
|
float x = this.distance * sinVertical * sinHorizontal;
|
||||||
float y = this.distance * cosVertical;
|
float y = this.distance * cosVertical;
|
||||||
float z = this.distance * sinVertical * cosHorizontal;
|
float z = this.distance * sinVertical * cosHorizontal;
|
||||||
|
|
||||||
Vector3 v = new Vector3(x, y, z);
|
Vector3Float v = new Vector3Float(x, y, z);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
#if UNITY_5_3_OR_NEWER
|
||||||
|
using Passer.LinearAlgebra.Vector3Float = UnityEngine.Vector3
|
||||||
|
#else
|
||||||
|
|
||||||
namespace Passer.LinearAlgebra {
|
namespace Passer.LinearAlgebra {
|
||||||
|
|
||||||
public class Vector3Of<T> {
|
public class Vector3Of<T> {
|
||||||
@ -10,12 +14,20 @@ namespace Passer.LinearAlgebra {
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public uint magnitude {
|
||||||
|
// get => (float)Math.Sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Vector3Int : Vector3Of<int> {
|
public class Vector3Int(int x, int y, int z) : Vector3Of<int>(x, y, z) {
|
||||||
public Vector3Int(int x, int y, int z) : base(x, y, z) { }
|
|
||||||
}
|
}
|
||||||
public class Vector3Float : Vector3Of<float> {
|
public class Vector3Float(float x, float y, float z) : Vector3Of<float>(x, y, z) {
|
||||||
public Vector3Float(float x, float y, float z) : base(x, y, z) { }
|
|
||||||
|
public float magnitude {
|
||||||
|
get => (float)Math.Sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user