Matrix.cpp
上传用户:gb3593
上传日期:2022-01-07
资源大小:3028k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #pragma once
  2. #include "Stdafx.h"
  3. #include "Vector.cpp"
  4. namespace Box2D
  5. {
  6. namespace Net
  7. {
  8. public ref class Matrix
  9. {
  10. internal:
  11. Matrix(const b2Mat22 &matrix) : col1(gcnew Vector(matrix.col1)), col2(gcnew Vector(matrix.col2)) { }
  12. b2Mat22 getMat22()
  13. {
  14. return b2Mat22(col1->getVec2(), col2->getVec2());
  15. }
  16. public:
  17. Vector ^col1, ^col2;
  18. Matrix() : col1(gcnew Vector()), col2(gcnew Vector()) {}
  19. Matrix(Vector^ c1, Vector^ c2) : col1(gcnew Vector(c1)), col2(gcnew Vector(c2)) { }
  20. explicit Matrix(float32 angle)
  21. {
  22. Set(angle);
  23. }
  24. void Set(Vector^ c1, Vector^ c2)
  25. {
  26. col1->X = c1->X;
  27. col1->Y = c1->Y;
  28. col2->X = c2->X;
  29. col2->Y = c2->Y;
  30. }
  31. void Set(float32 angle)
  32. {
  33. float32 c = cosf(angle), s = sinf(angle);
  34. col1->X = c; col2->X = -s;
  35. col1->Y = s; col2->Y = c;
  36. }
  37. void SetIdentity()
  38. {
  39. col1->X = 1; col2->X = 0;
  40. col1->Y = 0; col2->Y = 1;
  41. }
  42. static Vector^ operator * (Matrix^ mat, Vector^ a)
  43. {
  44. return gcnew Vector(b2Mul(mat->getMat22(), a->getVec2()));
  45. }
  46. };
  47. }
  48. }
  49. /*
  50. struct b2Mat22
  51. {
  52. void SetZero()
  53. {
  54. col1.x = 0.0f; col2.x = 0.0f;
  55. col1.y = 0.0f; col2.y = 0.0f;
  56. }
  57. b2Mat22 Invert() const
  58. {
  59. float32 a = col1.x, b = col2.x, c = col1.y, d = col2.y;
  60. b2Mat22 B;
  61. float32 det = a * d - b * c;
  62. b2Assert(det != 0.0f);
  63. det = 1.0f / det;
  64. B.col1.x =  det * d; B.col2.x = -det * b;
  65. B.col1.y = -det * c; B.col2.y =  det * a;
  66. return B;
  67. }
  68. // Solve A * x = b
  69. b2Vec2 Solve(const b2Vec2& b) const
  70. {
  71. float32 a11 = col1.x, a12 = col2.x, a21 = col1.y, a22 = col2.y;
  72. float32 det = a11 * a22 - a12 * a21;
  73. b2Assert(det != 0.0f);
  74. det = 1.0f / det;
  75. b2Vec2 x;
  76. x.x = det * (a22 * b.x - a12 * b.y);
  77. x.y = det * (a11 * b.y - a21 * b.x);
  78. return x;
  79. }
  80. b2Vec2 col1, col2;
  81. };
  82. */