diff --git a/Assets/NanoBrain/LinearAlgebra/src/Angle.cs b/Assets/NanoBrain/LinearAlgebra/src/Angle.cs index 70f5b10..7d2fd6b 100644 --- a/Assets/NanoBrain/LinearAlgebra/src/Angle.cs +++ b/Assets/NanoBrain/LinearAlgebra/src/Angle.cs @@ -57,7 +57,7 @@ namespace LinearAlgebra { public readonly float inRevolutions => this.value / 360.0f; public override string ToString() { - return $"{this.inDegrees} deg."; + return $"{this.inDegrees}\u00B0"; } public static readonly AngleFloat zero = Degrees(0); diff --git a/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs b/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs index 996232c..2f3f801 100644 --- a/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs +++ b/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs @@ -124,7 +124,7 @@ namespace LinearAlgebra { #endif public override readonly string ToString() { - return $"Spherical(h: {this.direction.horizontal}, v: {this.direction.vertical}, distance: {this.distance})"; + return $"Spherical({this.distance}, h: {this.direction.horizontal}, v: {this.direction.vertical})"; } diff --git a/Assets/NanoBrain/LinearAlgebra/src/Vector3Float.cs b/Assets/NanoBrain/LinearAlgebra/src/Vector3Float.cs index d8208d3..bcf8626 100644 --- a/Assets/NanoBrain/LinearAlgebra/src/Vector3Float.cs +++ b/Assets/NanoBrain/LinearAlgebra/src/Vector3Float.cs @@ -119,6 +119,10 @@ namespace LinearAlgebra { return new Vector3Float(horizontal, vertical, depth); } + public override string ToString() { + return $"({this.horizontal}, {this.vertical}, {this.depth})"; + } + /// /// A vector with zero for all axis /// diff --git a/Assets/NanoBrain/LinearAlgebra/test/DirectionTest.cs b/Assets/NanoBrain/LinearAlgebra/test/DirectionTest.cs index 8fe3b93..0eb9882 100644 --- a/Assets/NanoBrain/LinearAlgebra/test/DirectionTest.cs +++ b/Assets/NanoBrain/LinearAlgebra/test/DirectionTest.cs @@ -103,7 +103,7 @@ namespace LinearAlgebra.Test { [Test] public void ToVector3AndBack2() { - Direction d1 = Direction.Degrees(135, 85); + Direction d1 = Direction.Degrees(-135, 85); Vector3Float v = d1.ToVector3(); Direction d2 = Direction.FromVector3(v); Assert.AreEqual(d1.horizontal.inDegrees, d2.horizontal.inDegrees, 0.0001f); diff --git a/Assets/NanoBrain/LinearAlgebra/test/SphericalTest.cs b/Assets/NanoBrain/LinearAlgebra/test/SphericalTest.cs index d7553dd..48db8d9 100644 --- a/Assets/NanoBrain/LinearAlgebra/test/SphericalTest.cs +++ b/Assets/NanoBrain/LinearAlgebra/test/SphericalTest.cs @@ -234,6 +234,30 @@ namespace LinearAlgebra.Test { Assert.AreEqual(MathF.Cos(alpha), avg.distance, 1e-4f); } + [Test] + public void Average_CompareWithVector3() { + // Four vectors around azimuth 0, pi/2, pi, 3pi/2 at same polar angle from vertical (alpha) + float alpha = MathF.PI / 6f; // polar angle from vertical + float elevation = MathF.PI / 2f - alpha; // convert polar-from-vertical to elevation + List dirs = new List { + new(1f, Direction.Radians(0f, elevation)), + new(2f, Direction.Radians(MathF.PI/2, elevation+1)), + new(3f, Direction.Radians(MathF.PI, elevation+2)), + new(4f, Direction.Radians(3*MathF.PI/2, elevation+3)) + }; + + Spherical avg = Spherical.Average(dirs); + + Vector3Float r = Vector3Float.zero; + foreach (Spherical dir in dirs) { + r += dir.ToVector3(); + } + r = r / 4; + Spherical avg2 = Spherical.FromVector3(r); + + Assert.AreEqual(avg, avg2); + } + } } #endif \ No newline at end of file