diff --git a/源代码/.vs/ProjectEvaluation/stgsharpdevelop.metadata.v5.1 b/源代码/.vs/ProjectEvaluation/stgsharpdevelop.metadata.v5.1 index bbb01d3b..06a7fe79 100644 Binary files a/源代码/.vs/ProjectEvaluation/stgsharpdevelop.metadata.v5.1 and b/源代码/.vs/ProjectEvaluation/stgsharpdevelop.metadata.v5.1 differ diff --git a/源代码/.vs/ProjectEvaluation/stgsharpdevelop.projects.v5.1 b/源代码/.vs/ProjectEvaluation/stgsharpdevelop.projects.v5.1 index e1533d6b..bfd66827 100644 Binary files a/源代码/.vs/ProjectEvaluation/stgsharpdevelop.projects.v5.1 and b/源代码/.vs/ProjectEvaluation/stgsharpdevelop.projects.v5.1 differ diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/78e1622b-357e-4a1f-8adf-affa0022a666.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/78e1622b-357e-4a1f-8adf-affa0022a666.vsidx new file mode 100644 index 00000000..cc62c582 Binary files /dev/null and b/源代码/.vs/StgSharpDevelop/FileContentIndex/78e1622b-357e-4a1f-8adf-affa0022a666.vsidx differ diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/8807ee19-39fd-48cf-b572-cc1b941d7547.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/8807ee19-39fd-48cf-b572-cc1b941d7547.vsidx deleted file mode 100644 index 56fee760..00000000 Binary files a/源代码/.vs/StgSharpDevelop/FileContentIndex/8807ee19-39fd-48cf-b572-cc1b941d7547.vsidx and /dev/null differ diff --git a/源代码/.vs/StgSharpDevelop/FileContentIndex/b2939aac-b2f9-4894-a000-9989f510b2da.vsidx b/源代码/.vs/StgSharpDevelop/FileContentIndex/b9cb0f04-a05d-4f74-9c51-1c51f7fae574.vsidx similarity index 100% rename from 源代码/.vs/StgSharpDevelop/FileContentIndex/b2939aac-b2f9-4894-a000-9989f510b2da.vsidx rename to 源代码/.vs/StgSharpDevelop/FileContentIndex/b9cb0f04-a05d-4f74-9c51-1c51f7fae574.vsidx diff --git a/源代码/.vs/StgSharpDevelop/v17/.suo b/源代码/.vs/StgSharpDevelop/v17/.suo index c8db23ba..4e1ac0de 100644 Binary files a/源代码/.vs/StgSharpDevelop/v17/.suo and b/源代码/.vs/StgSharpDevelop/v17/.suo differ diff --git a/源代码/.vs/StgSharpDevelop/v17/Browse.VC.db b/源代码/.vs/StgSharpDevelop/v17/Browse.VC.db index c461adf5..7e9c1543 100644 Binary files a/源代码/.vs/StgSharpDevelop/v17/Browse.VC.db and b/源代码/.vs/StgSharpDevelop/v17/Browse.VC.db differ diff --git a/源代码/.vs/StgSharpDevelop/v17/ipch/AutoPCH/5ec93b6b2cc2673a/LINEAR.ipch b/源代码/.vs/StgSharpDevelop/v17/ipch/AutoPCH/5ec93b6b2cc2673a/LINEAR.ipch index 60b19384..71670c3f 100644 Binary files a/源代码/.vs/StgSharpDevelop/v17/ipch/AutoPCH/5ec93b6b2cc2673a/LINEAR.ipch and b/源代码/.vs/StgSharpDevelop/v17/ipch/AutoPCH/5ec93b6b2cc2673a/LINEAR.ipch differ diff --git a/源代码/StgSharp/Math/Linear/Vector.Multiple.cs b/源代码/StgSharp/Math/Linear/Vector.Multiple.cs index e8d79cef..2ea47bd5 100644 --- a/源代码/StgSharp/Math/Linear/Vector.Multiple.cs +++ b/源代码/StgSharp/Math/Linear/Vector.Multiple.cs @@ -5,6 +5,7 @@ namespace StgSharp.Math { public static unsafe partial class VectorCalc { + public static unsafe float Multiple(Vec3d vec1, Vec3d vec2) { @@ -18,8 +19,6 @@ namespace StgSharp.Math m128.single_2; } - - public static unsafe float Multiple(Vec4d vec1,Vec3d vec2) { IntPtr retPtr = internalIO.mulps_internal(vec1._m128Ptr,vec2._m128Ptr); @@ -34,6 +33,14 @@ namespace StgSharp.Math public static Matrix2x2 Multiple(Matrix2x2 matrix1, Matrix2x2 matrix2) { + if (matrix2 == Matrix2x2.Unit) + { + return new Matrix2x2( + internalIO.load_cpy_internal(matrix1._colum0Ptr), + internalIO.load_cpy_internal(matrix1._colum1Ptr) + ); + } + Matrix2x2 trans = matrix1.Transpose(TransposeMode.Copy); return new Matrix2x2( @@ -45,6 +52,19 @@ namespace StgSharp.Math ); } + public static Matrix2x2 Multiple(Matrix2x3 matrix1, Matrix3x2 matrix2) + { + Matrix3x2 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix2x2( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr) + ); + } + public static Matrix2x2 Multiple(Matrix2x4 matrix1, Matrix4x2 matrix2) { Matrix4x2 trans = matrix1.Transpose(TransposeMode.Copy); @@ -58,6 +78,51 @@ namespace StgSharp.Math ); } + public static Matrix2x3 Multiple(Matrix2x2 matrix1, Matrix2x3 matrix2) + { + Matrix2x2 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix2x3( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr) + ); + } + + public static Matrix2x3 Multiple(Matrix2x3 matrix1, Matrix3x3 matrix2) + { + Matrix3x2 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix2x3( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr) + ); + } + + public static Matrix2x3 Multiple(Matrix2x4 matrix1, Matrix4x3 matrix2) + { + Matrix4x2 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix2x3( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr) + ); + } + public static Matrix2x4 Multiple(Matrix2x2 matrix1, Matrix2x4 matrix2) { Matrix2x2 trans = matrix1.Transpose(TransposeMode.Copy); @@ -75,6 +140,107 @@ namespace StgSharp.Math ); } + public static Matrix2x4 Multiple(Matrix2x3 matrix1, Matrix3x4 matrix2) + { + Matrix3x2 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix2x4( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr) + ); + } + + public static Matrix2x4 Multiple(Matrix2x4 matrix1, Matrix4x4 matrix2) + { + Matrix4x2 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix2x4( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr) + ); + } + + public static Matrix3x2 Multiple(Matrix3x2 matrix1, Matrix2x2 matrix2) + { + Matrix2x3 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix3x2( + internalIO.mulps_sum_internal(trans._colum0Ptr,matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr,matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr,matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr,matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr,matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr,matrix2._colum1Ptr) + ); + } + + public static Matrix3x2 Multiple(Matrix3x3 matrix1, Matrix3x2 matrix2) + { + Matrix3x3 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix3x2( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr) + ); + } + + public static Matrix3x2 Multiple(Matrix3x4 matrix1, Matrix4x2 matrix2) + { + Matrix4x3 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix3x2( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr) + ); + } + + public static Matrix3x3 Multiple(Matrix3x2 matrix1, Matrix2x3 matrix2) + { + Matrix2x3 transpose = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix3x3( + internalIO.mulps_sum_internal(transpose._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(transpose._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(transpose._colum0Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(transpose._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(transpose._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(transpose._colum1Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(transpose._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(transpose._colum2Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(transpose._colum2Ptr, matrix2._colum2Ptr) + ); + } + public static Matrix3x3 Multiple(Matrix3x3 matrix1, Matrix3x3 matrix2) { Matrix3x3 transpose = matrix2.Transpose(TransposeMode.Copy); @@ -113,11 +279,199 @@ namespace StgSharp.Math ); } + public static Matrix3x4 Multiple(Matrix3x2 matrix1, Matrix2x4 matrix2) + { + Matrix2x3 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix3x4( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum3Ptr) + ); + } + + public static Matrix3x4 Multiple(Matrix3x3 matrix1, Matrix3x4 matrix2) + { + Matrix3x3 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix3x4( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum3Ptr) + ); + } + + public static Matrix3x4 Multiple(Matrix3x4 matrix1, Matrix4x4 matrix2) + { + Matrix4x3 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix3x4( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum3Ptr) + ); + } + public static Matrix4x2 Multiple(Matrix4x2 matrix1, Matrix2x2 matrix2) { Matrix2x4 trans = matrix1.Transpose(TransposeMode.Copy); + return new Matrix4x2( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr) + ); + } + + public static Matrix4x2 Multiple(Matrix4x3 matrix1, Matrix3x2 matrix2) + { + Matrix3x4 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix4x2( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr) + ); + } + + public static Matrix4x2 Multiple(Matrix4x4 matrix1, Matrix4x2 matrix2) + { + + Matrix4x4 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix4x2( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr) + ); + } + + public static Matrix4x3 Multiple(Matrix4x2 matrix1, Matrix2x3 matrix2) + { + Matrix2x4 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix4x3( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum2Ptr) + ); + } + + public static Matrix4x3 Multiple(Matrix4x3 matrix1, Matrix3x3 matrix2) + { + + Matrix3x4 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix4x3( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum2Ptr) + ); + } + + public static Matrix4x3 Multiple(Matrix4x4 matrix1, Matrix4x3 matrix2) + { + + Matrix4x4 trans = matrix1.Transpose(TransposeMode.Copy); + + return new Matrix4x3( + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr), + + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr), + internalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum2Ptr) + ); } public static Matrix4x4 Multiple(Matrix4x2 matrix1, Matrix2x4 matrix2) @@ -146,7 +500,7 @@ namespace StgSharp.Math ); } - public static Matrix4x4 Multiple( Matrix4x3 matrix1, Matrix3x4 matrix2 ) + public static Matrix4x4 Multiple( Matrix4x3 matrix1, Matrix3x4 matrix2) { Matrix3x4 trans = matrix1.Transpose(TransposeMode.Copy); @@ -173,7 +527,7 @@ namespace StgSharp.Math ); } - public static Matrix4x4 Multiple( Matrix4x4 matrix1, Matrix4x4 matrix2 ) + public static Matrix4x4 Multiple( Matrix4x4 matrix1, Matrix4x4 matrix2) { Matrix4x4 transpose = matrix1.Transpose(TransposeMode.Copy); return new Matrix4x4( diff --git a/源代码/StgSharp/Math/Linear/matrix2x2.cs b/源代码/StgSharp/Math/Linear/matrix2x2.cs index 9551457f..6799c6c2 100644 --- a/源代码/StgSharp/Math/Linear/matrix2x2.cs +++ b/源代码/StgSharp/Math/Linear/matrix2x2.cs @@ -5,6 +5,12 @@ namespace StgSharp.Math { public class Matrix2x2 { + public static Matrix2x2 Unit + = new Matrix2x2( + 1,0, + 0,1 + ); + internal M128Map _map; internal IntPtr _colum0Ptr; diff --git a/源代码/StgSharp/Math/Linear/matrix2x3.cs b/源代码/StgSharp/Math/Linear/matrix2x3.cs index 642f08fd..678fb79f 100644 --- a/源代码/StgSharp/Math/Linear/matrix2x3.cs +++ b/源代码/StgSharp/Math/Linear/matrix2x3.cs @@ -3,102 +3,127 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit)] - public struct matrix2x3 : IEquatable + public class Matrix2x3 { - [FieldOffset(0)] - public Vec3d row1; - [FieldOffset(12)] - public Vec3d row2; + internal M128Map _map; - public matrix2x3(Vec3d r1, Vec3d r2) - { - row1 = r1; - row2 = r2; - } + internal IntPtr _colum0Ptr; + internal IntPtr _colum1Ptr; + internal IntPtr _colum2Ptr; - public matrix2x3( - float r11, float r12, float r13, - float r21, float r22, float r23 + private bool _isTransposed; + private Matrix3x2 _transpose; + + public Matrix2x3( + float a00, float a01, float a02, + float a10, float a11, float a12 ) { - row1 = new Vec3d(r11, r12, r13); - row2 = new Vec3d(r21, r22, r23); + _colum0Ptr = internalIO.load_internal(a00,a10,0,0); + _colum0Ptr = internalIO.load_internal(a01,a11,0,0); + _colum0Ptr = internalIO.load_internal(a02,a12,0,0); + + _transpose = new Matrix3x2(this); } - public override bool Equals(object obj) + internal Matrix2x3( + IntPtr colum0Ptr, + IntPtr colum1Ptr, + IntPtr colum2Ptr + ) { - if (obj == null) + _colum0Ptr = colum0Ptr; + _colum1Ptr = colum1Ptr; + _colum2Ptr = colum2Ptr; + + _transpose = new Matrix3x2(this); + } + + public Matrix2x3(Matrix3x2 transpose) + { + _transpose = transpose; + } + + public unsafe Matrix3x2 Transpose(TransposeMode transposeMode) + { + if (_isTransposed) { - return false; + (*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0; + (*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1; + + (*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0; + (*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1; + + (*(M128*)_transpose._colum0Ptr).single_2 = (*(M128*)_colum2Ptr).single_0; + (*(M128*)_transpose._colum1Ptr).single_2 = (*(M128*)_colum2Ptr).single_1; + + _isTransposed = true; } - else if (obj.GetType() != typeof(matrix2x3)) + switch (transposeMode) { - return false; + case TransposeMode.New: + return new Matrix3x2( + _transpose._colum0Ptr, + _transpose._colum1Ptr + ); + break; + case TransposeMode.Copy: + return _transpose; + break; + default: + throw new Exception(); + break; + } + } + + public static Matrix2x3 operator +(Matrix2x3 matrix1, Matrix2x3 matrix2) + { + return new Matrix2x3( + internalIO.addps_internal(matrix1._colum0Ptr,matrix2._colum0Ptr), + internalIO.addps_internal(matrix1._colum1Ptr,matrix2._colum1Ptr), + internalIO.addps_internal(matrix1._colum2Ptr,matrix2._colum2Ptr) + ); + } + + public static Matrix2x3 operator -(Matrix2x3 matrix1, Matrix2x3 matrix2) + { + return new Matrix2x3( + internalIO.subps_internal(matrix1._colum0Ptr, matrix2._colum0Ptr), + internalIO.subps_internal(matrix1._colum1Ptr, matrix2._colum1Ptr), + internalIO.subps_internal(matrix1._colum2Ptr, matrix2._colum2Ptr) + ); + } + + public static Matrix2x3 operator *(Matrix2x3 matrix, float value) + { + return new Matrix2x3( + internalIO.mulps_const_internal(matrix._colum0Ptr, value), + internalIO.mulps_const_internal(matrix._colum1Ptr, value), + internalIO.mulps_const_internal(matrix._colum2Ptr, value) + ); + } + + public static Matrix2x3 operator /(Matrix2x3 matrix, float value) + { + return new Matrix2x3( + internalIO.divps_const_internal(matrix._colum0Ptr, value), + internalIO.divps_const_internal(matrix._colum1Ptr, value), + internalIO.divps_const_internal(matrix._colum2Ptr, value) + ); + } + + ~Matrix2x3() + { + if (_map == null) + { + internalIO.deinitM128_internal(_colum0Ptr); + internalIO.deinitM128_internal(_colum1Ptr); + internalIO.deinitM128_internal(_colum2Ptr); } else { - return this.Equals((Vec3d)obj); + } } - - public override int GetHashCode() - { - return HashCode.Combine(row1, row2); - } - - public override string ToString() - { - return $"{row1}\n{row2}"; - } - - bool IEquatable.Equals(matrix2x3 other) - { - if (this.GetHashCode() != other.GetHashCode()) - { - return false; - } - else - { - return - this.row1 == other.row1 - && this.row2 == other.row2; - } - } - - public static matrix2x3 operator +(matrix2x3 matrix1, matrix2x3 matrix2) - { - return new matrix2x3( - matrix1.row1 + matrix2.row1, - matrix1.row2 + matrix2.row2 - ); - } - - public static matrix2x3 operator -(matrix2x3 matrix1, matrix2x3 matrix2) - { - return new matrix2x3( - matrix1.row1 - matrix2.row1, - matrix1.row2 - matrix2.row2 - ); - } - - public static matrix2x3 operator *(matrix2x3 array, float x) - { - return new matrix2x3( - array.row1 * x, - array.row2 * x - ); - } - - public static matrix2x3 operator /(matrix2x3 array, float x) - { - return new matrix2x3( - array.row1 / x, - array.row2 / x - ); - } - - - } } diff --git a/源代码/StgSharp/Math/Linear/matrix3x2.cs b/源代码/StgSharp/Math/Linear/matrix3x2.cs index 50444317..4c73c055 100644 --- a/源代码/StgSharp/Math/Linear/matrix3x2.cs +++ b/源代码/StgSharp/Math/Linear/matrix3x2.cs @@ -3,92 +3,85 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - [StructLayout(LayoutKind.Explicit)] - public struct matrix3x2 : IEquatable + public class Matrix3x2 { - [FieldOffset(0)] - public vec2d row1; - [FieldOffset(8)] - public vec2d row2; - [FieldOffset(16)] - public vec2d row3; + internal M128Map _map; - public matrix3x2(vec2d r1, vec2d r2, vec2d r3) - { - row1 = r1; - row2 = r2; - row3 = r3; - } + internal IntPtr _colum0Ptr; + internal IntPtr _colum1Ptr; - public matrix3x2( - float a11, float a12, - float a21, float a22, - float a31, float a32 + private bool _isTransposed; + private Matrix2x3 _transpose; + + public Matrix3x2( + float a00,float a01, + float a10,float a11, + float a20,float a21 ) { - row1 = new vec2d(a11, a12); - row2 = new vec2d(a21, a22); - row3 = new vec2d(a31, a32); + _colum0Ptr = internalIO.load_internal(a00,a10,a20,0); + _colum0Ptr = internalIO.load_internal(a01,a11,a21,0); + + _transpose = new Matrix2x3(this); } - bool IEquatable.Equals(matrix3x2 other) + internal Matrix3x2( + IntPtr colum0Ptr, + IntPtr colum1Ptr + ) { - if (this.GetHashCode() != other.GetHashCode()) + _colum0Ptr = colum0Ptr; + _colum1Ptr = colum1Ptr; + + _transpose = new Matrix2x3(this); + } + + internal Matrix3x2(Matrix2x3 transpose) + { + _transpose = transpose; + } + + public unsafe Matrix2x3 Transpose(TransposeMode transposeMode) + { + if (_isTransposed) { - return false; + (*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0; + (*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1; + (*(M128*)_transpose._colum2Ptr).single_0 = (*(M128*)_colum0Ptr).single_2; + + (*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0; + (*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1; + (*(M128*)_transpose._colum2Ptr).single_1 = (*(M128*)_colum1Ptr).single_2; + + _isTransposed = true; + } - else + switch (transposeMode) { - return - this.row1 == other.row1 - && this.row2 == other.row2 - && this.row3 == other.row3 - ; + case TransposeMode.New: + return new Matrix2x3( + _transpose._colum0Ptr, + _transpose._colum0Ptr, + _transpose._colum0Ptr + ); + break; + case TransposeMode.Copy: + return _transpose; + break; + default: + throw new Exception(); + break; } + } - public override bool Equals(object obj) + ~Matrix3x2() { - if (obj == null) + if (_map==null) { - return false; + internalIO.deinitM128_internal(_colum0Ptr); + internalIO.deinitM128_internal(_colum1Ptr); } - else if (obj.GetType() != typeof(matrix3x2)) - { - return false; - } - else - { - return this.Equals((matrix3x2)obj); - } - } - - public override int GetHashCode() - { - return HashCode.Combine(row1, row2, row3); - } - - public override string ToString() - { - return $"{row1}\n{row2}\n{row3}"; - } - - public static matrix3x2 operator +(matrix3x2 matrix1, matrix3x2 matrix2) - { - return new matrix3x2( - matrix1.row1 + matrix2.row1, - matrix1.row2 + matrix2.row2, - matrix1.row3 + matrix2.row3 - ); - } - - public static matrix3x2 operator -(matrix3x2 matrix1, matrix3x2 matrix2) - { - return new matrix3x2( - matrix1.row1 - matrix2.row1, - matrix1.row2 - matrix2.row2, - matrix1.row3 - matrix2.row3 - ); } } diff --git a/源代码/StgSharp/Math/Linear/matrix3x3.cs b/源代码/StgSharp/Math/Linear/matrix3x3.cs index f1a86557..d86ba5f2 100644 --- a/源代码/StgSharp/Math/Linear/matrix3x3.cs +++ b/源代码/StgSharp/Math/Linear/matrix3x3.cs @@ -5,6 +5,13 @@ namespace StgSharp.Math { public class Matrix3x3 { + public static Matrix3x3 Unit + = new Matrix3x3( + 1,0,0, + 0,1,0, + 0,0,1 + ); + internal M128Map map; internal IntPtr _colum0Ptr; diff --git a/源代码/StgSharp/Math/Linear/vec2d.cs b/源代码/StgSharp/Math/Linear/vec2d.cs index 59c0bf73..bfa3f746 100644 --- a/源代码/StgSharp/Math/Linear/vec2d.cs +++ b/源代码/StgSharp/Math/Linear/vec2d.cs @@ -3,93 +3,68 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - - [StructLayout(LayoutKind.Explicit)] - public struct vec2d : IEquatable + public class Vec2d { - [FieldOffset(0)] - public float X; - [FieldOffset(sizeof(float))] - public float Y; - public vec2d(float x, float y) + internal M128Map _map; + internal IntPtr _m128Ptr; + + public unsafe float X { - X = x; - Y = y; + get { return (*(M128*)_m128Ptr).single_0; } + set { (*(M128*)_m128Ptr).single_0 = value; } } - public bool Equals(vec2d other) + public unsafe float Y { - if (this.GetHashCode() != other.GetHashCode()) - { - return false; - } - else - { - return this.X == other.X && this.Y == other.Y; - } + get { return (*(M128*)_m128Ptr).single_1; } + set { (*(M128*)_m128Ptr).single_1 = value; } } - public override bool Equals(object obj) + public Vec2d(float x, float y) { - if (obj == null) - { - return false; - } - else if (obj.GetType() != typeof(vec2d)) - { - return false; - } - else - { - return this.Equals((vec2d)obj); - } + _m128Ptr = internalIO.load_internal(x, y, 0, 0); } - public override int GetHashCode() + internal Vec2d(IntPtr value) { - return HashCode.Combine(X, Y); + _m128Ptr = value; } - public override string ToString() + public static Vec2d operator +(Vec2d vec1, Vec2d vec2) { - return $"{this.X}\t{this.Y}"; + return new Vec2d( + internalIO.addps_internal(vec1._m128Ptr,vec2._m128Ptr) + ); } - public static bool operator ==(vec2d vec1, vec2d vec2) + public static Vec2d operator -(Vec2d vec1, Vec2d vec2) { - return vec1.X == vec2.X && vec1.Y == vec2.Y; + return new Vec2d( + internalIO.subps_internal(vec1._m128Ptr,vec2._m128Ptr) + ); } - public static bool operator !=(vec2d vec1, vec2d vec2) + public static Vec2d operator *(Vec2d vec, float value) { - return !(vec1.X == vec2.X && vec1.Y == vec2.Y); + return new Vec2d( + internalIO.mulps_const_internal(vec._m128Ptr,value) + ); } - public static vec2d operator +(vec2d vec1, vec2d vec2) + public static Vec2d operator /(Vec2d vec, float value) { - return new vec2d(vec1.X + vec2.X, vec1.Y + vec2.Y); + return new Vec2d( + internalIO.divps_const_internal(vec._m128Ptr, value) + ); } - public static vec2d operator -(vec2d vec1, vec2d vec2) + public static float operator *(Vec2d vec1, Vec2d vec2) { - return new vec2d(vec1.X - vec2.X, vec1.Y - vec2.Y); + return internalIO.mulps_sum_internal(vec1._m128Ptr, vec2._m128Ptr); } - public static vec2d operator *(vec2d vec, float x) - { - return new vec2d(vec.X * x, vec.Y * x); - } - public static vec2d operator /(vec2d vec, float x) - { - return new vec2d(vec.X / x, vec.Y / x); - } - - public static implicit operator float[](vec2d vec) - { - return new float[2] { vec.X, vec.Y }; - } } } diff --git a/源代码/StgSharp/Math/Linear/vec3d.cs b/源代码/StgSharp/Math/Linear/vec3d.cs index 337dc59f..ee778dd9 100644 --- a/源代码/StgSharp/Math/Linear/vec3d.cs +++ b/源代码/StgSharp/Math/Linear/vec3d.cs @@ -5,150 +5,6 @@ using System.Runtime.InteropServices; namespace StgSharp.Math { - /* - [StructLayout(LayoutKind.Explicit, Size = 12, Pack = 16)] - public struct Vec3d : IEquatable - { - [FieldOffset(0)] - public float X; - [FieldOffset(4)] - public float Y; - [FieldOffset(8)] - public float Z; - - public Vec3d(float x, float y, float z) - { - X = x; - Y = y; - Z = z; - } - - bool IEquatable.Equals(Vec3d other) - { - if (this.GetHashCode() != other.GetHashCode()) - { - return false; - } - else - { - return this.X == other.X - && this.Y == other.Y - && this.Z == other.Z; - } - } - - public override bool Equals(object obj) - { - if (obj == null) - { - return false; - } - else if (obj.GetType() != typeof(Vec3d)) - { - return false; - } - else - { - return this.Equals((Vec3d)obj); - } - } - - public override int GetHashCode() - { - return HashCode.Combine(X, Y, Z); - } - - public override string ToString() - { - return $"{X}\t{Y}\t{Z}"; - } - - public string ToString(string sample) - { - return $"{X.ToString(sample)}\t{Y.ToString(sample)}\t{Z.ToString(sample)}"; - } - - public static bool operator ==(Vec3d vec1, Vec3d vec2) - { - return vec1.X == vec2.X - && vec1.Y == vec2.Y - && vec1.Z == vec2.Z; - } - - public static bool operator !=(Vec3d vec1, Vec3d vec2) - { - return !(vec1.X == vec2.X - && vec1.Y == vec2.Y - && vec1.Z == vec2.Z); - } - - public static Vec3d operator +(Vec3d vec1, Vec3d vec2) - { - return new Vec3d( - vec1.X + vec2.X, - vec1.Y + vec2.Y, - vec1.Z + vec2.Z - ); - } - - public static Vec3d operator -(Vec3d vec1, Vec3d vec2) - { - return new Vec3d( - vec1.X - vec2.X, - vec1.Y - vec2.Y, - vec1.Z - vec2.Z - ); - } - - public static float operator *(Vec3d vec1, Vec3d vec2) - { - return - vec1.X * vec2.X - + vec1.Y + vec2.Y - + vec1.Z + vec2.Z; - } - - public static Vec3d operator *(Vec3d vec, float x) - { - return new Vec3d( - vec.X * x, - vec.Y * x, - vec.Z * x - ); - } - - public static Vec3d operator *(float x, Vec3d vec) - { - return new Vec3d( - vec.X * x, - vec.Y * x, - vec.Z * x - ); - } - - public static Vec3d operator /(Vec3d vec, float x) - { - return new Vec3d( - vec.X / x, - vec.Y / x, - vec.Z / x - ); - } - - public static implicit operator float[](Vec3d vec) - { - return new float[3] { vec.X, vec.Y, vec.Y }; - } - - public static implicit operator Vec3d(float[] floatArray) - { - return new Vec3d(floatArray[0], floatArray[1], floatArray[2]); - } - } - - /**/ - - public class Vec3d { public static Vec3d defaultValue = diff --git a/源代码/StgShqrpGraphic/linear.c b/源代码/StgShqrpGraphic/linear.c index 37b91c5d..a77a003f 100644 --- a/源代码/StgShqrpGraphic/linear.c +++ b/源代码/StgShqrpGraphic/linear.c @@ -33,6 +33,8 @@ SSGC_API __m128* __cdecl load_cpy(__m128* ptr) *ret = *ptr; } + printf(); + return ret; }