MathUtil.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using UnityEngine;
  2. using System.Collections;
  3. public static class MathUtil
  4. {
  5. public static Vector2 Lerp(this Vector2 left, Vector2 right, float lerp)
  6. {
  7. return new Vector2(Mathf.Lerp(left.x, right.x, lerp), Mathf.Lerp(left.y, right.y, lerp));
  8. }
  9. public static Vector3 Lerp(this Vector3 left, Vector3 right, float lerp)
  10. {
  11. return new Vector3(Mathf.Lerp(left.x, right.x, lerp), Mathf.Lerp(left.y, right.y, lerp), Mathf.Lerp(left.z, right.z, lerp));
  12. }
  13. public static Vector4 Lerp(this Vector4 left, Vector4 right, float lerp)
  14. {
  15. return new Vector4(Mathf.Lerp(left.x, right.x, lerp), Mathf.Lerp(left.y, right.y, lerp), Mathf.Lerp(left.z, right.z, lerp), Mathf.Lerp(left.w, right.w, lerp));
  16. }
  17. public static bool FEqual(this float f1, float f2, float compareDeviation = 1e-5f)
  18. {
  19. return Mathf.Abs(f1 - f2) <= compareDeviation;
  20. }
  21. public static bool FEqual(this Vector3 v1, Vector3 v2, float compareDeviation = 1e-5f)
  22. {
  23. return v1.x.FEqual(v2.x, compareDeviation) && v1.y.FEqual(v2.y, compareDeviation) && v1.z.FEqual(v2.z, compareDeviation);
  24. }
  25. public static bool FEqual(this Vector3 v1, Vector3 v2, Vector3 compareDeviation)
  26. {
  27. return v1.x.FEqual(v2.x, compareDeviation.x) && v1.y.FEqual(v2.y, compareDeviation.y) && v1.z.FEqual(v2.z, compareDeviation.z);
  28. }
  29. public static bool FEqualXZ(this Vector3 v1, Vector3 v2, float compareDeviation = 1e-5f)
  30. {
  31. return v1.x.FEqual(v2.x, compareDeviation) && v1.z.FEqual(v2.z, compareDeviation);
  32. }
  33. public static Vector3 SetXY(this Vector3 vector, float x, float y)
  34. {
  35. vector.x = x;
  36. vector.y = y;
  37. return vector;
  38. }
  39. public static bool CloseTo(this Vector3 v1, Vector3 v2)
  40. {
  41. return Mathf.Abs(v1.x - v2.x) < 0.001f && Mathf.Abs(v1.y - v2.y) < 0.001f && Mathf.Abs(v1.z - v2.z) < 0.001f;
  42. }
  43. public static Vector3 SetX(this Vector3 vector, float x)
  44. {
  45. vector.x = x;
  46. return vector;
  47. }
  48. public static Vector3 SetY(this Vector3 vector, float y)
  49. {
  50. vector.y = y;
  51. return vector;
  52. }
  53. public static Vector3 SetZ(this Vector3 vector, float z)
  54. {
  55. vector.z = z;
  56. return vector;
  57. }
  58. public static Vector2 SetX(this Vector2 vector, float x)
  59. {
  60. vector.x = x;
  61. return vector;
  62. }
  63. public static Vector2 SetY(this Vector2 vector, float y)
  64. {
  65. vector.y = y;
  66. return vector;
  67. }
  68. public static Vector3 AddXY(this Vector3 vector, Vector2 V)
  69. {
  70. return new Vector3(vector.x + V.x, vector.y + V.y, vector.z);
  71. }
  72. public static Vector3 AddXYZ(this Vector3 vector, Vector3 V)
  73. {
  74. return new Vector3(vector.x + V.x, vector.y + V.y, vector.z + V.z);
  75. }
  76. public static Vector3 AddX(this Vector3 vector, float x)
  77. {
  78. return new Vector3(vector.x + x, vector.y, vector.z);
  79. }
  80. public static Vector3 AddY(this Vector3 vector, float y)
  81. {
  82. return new Vector3(vector.x, vector.y + y, vector.z);
  83. }
  84. public static Vector3 AddZ(this Vector3 vector, float z)
  85. {
  86. return new Vector3(vector.x, vector.y, vector.z + z);
  87. }
  88. public static Vector3 Dividing(this Vector3 a, Vector3 b)
  89. {
  90. return new Vector3(a.x / b.x, a.y / b.y, a.z / b.z);
  91. }
  92. public static Vector3 Multiply(this Vector3 a, Vector3 b)
  93. {
  94. return new Vector3(a.x * b.x, a.y * b.y, a.z * b.z);
  95. }
  96. public static Vector2 Multiply(this Vector2 a, Vector2 b)
  97. {
  98. return new Vector2(a.x * b.x, a.y * b.y);
  99. }
  100. public static Vector3 AbsVector3(this Vector3 a)
  101. {
  102. return new Vector3(Mathf.Abs(a.x), Mathf.Abs(a.y), Mathf.Abs(a.z));
  103. }
  104. public static bool IsOverlap(Rect r1, Rect r2)
  105. {
  106. if (r1.x + r1.width > r2.x &&
  107. r2.x + r2.width > r1.x &&
  108. r1.y + r1.height > r2.y &&
  109. r2.y + r2.height > r1.y)
  110. return true;
  111. else
  112. return false;
  113. }
  114. public static Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle)
  115. {
  116. Vector3 point = Quaternion.AngleAxis(angle, axis) * (position - center);
  117. Vector3 resultVec3 = center + point;
  118. return resultVec3;
  119. }
  120. //向上保留两位小数
  121. public static void ConverFloatRound(ref float fValue)
  122. {
  123. int nValue = (int)(fValue * 100);
  124. fValue += (fValue * 100) - nValue > 0.0f ? 0.01f : 0.0f;
  125. fValue = (int)(fValue * 100) * 0.01f;
  126. }
  127. }