MathHelper.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. using System;
  2. namespace PF
  3. {
  4. public static class MathHelper
  5. {
  6. public const float E = 2.718282f;
  7. public const float Log10E = 0.4342945f;
  8. public const float Log2E = 1.442695f;
  9. public const float Pi = 3.141593f;
  10. public const float PiOver2 = 1.570796f;
  11. public const float PiOver4 = 0.7853982f;
  12. public const float TwoPi = 6.283185f;
  13. public const float Deg2Rad = 0.01745329f;
  14. public const float Rad2Deg = 57.29578f;
  15. public const float Epsilon = 1.401298E-45f;
  16. public const float Infinity = float.PositiveInfinity;
  17. public const float NegativeInfinity = float.NegativeInfinity;
  18. public static float Clamp(float value, float min, float max)
  19. {
  20. value = (double) value > (double) max? max : value;
  21. value = (double) value < (double) min? min : value;
  22. return value;
  23. }
  24. public static int Clamp(int value, int min, int max)
  25. {
  26. value = value > max? max : value;
  27. value = value < min? min : value;
  28. return value;
  29. }
  30. public static float Hermite(float value1, float tangent1, float value2, float tangent2, float amount)
  31. {
  32. float num1 = amount;
  33. float num2 = num1 * num1;
  34. float num3 = num1 * num2;
  35. float num4 = (float) (2.0 * (double) num3 - 3.0 * (double) num2 + 1.0);
  36. float num5 = (float) (-2.0 * (double) num3 + 3.0 * (double) num2);
  37. float num6 = num3 - 2f * num2 + num1;
  38. float num7 = num3 - num2;
  39. return (float) ((double) value1 * (double) num4 + (double) value2 * (double) num5 + (double) tangent1 * (double) num6 +
  40. (double) tangent2 * (double) num7);
  41. }
  42. public static float Lerp(float value1, float value2, float amount)
  43. {
  44. return value1 + (value2 - value1) * amount;
  45. }
  46. public static float Max(float a, float b)
  47. {
  48. if ((double) a > (double) b)
  49. return a;
  50. return b;
  51. }
  52. public static float Min(float a, float b)
  53. {
  54. if ((double) a < (double) b)
  55. return a;
  56. return b;
  57. }
  58. public static int Max(int a, int b)
  59. {
  60. if (a > b)
  61. return a;
  62. return b;
  63. }
  64. public static int Min(int a, int b)
  65. {
  66. if (a < b)
  67. return a;
  68. return b;
  69. }
  70. public static float SmoothStep(float value1, float value2, float amount)
  71. {
  72. float num = MathHelper.Clamp(amount, 0.0f, 1f);
  73. return MathHelper.Lerp(value1, value2, (float) ((double) num * (double) num * (3.0 - 2.0 * (double) num)));
  74. }
  75. public static float RadiansToDegrees(float radians)
  76. {
  77. return radians * 57.29578f;
  78. }
  79. public static float DegreesToRadians(float degrees)
  80. {
  81. return degrees * ((float) Math.PI / 180f);
  82. }
  83. public static float Sin(float f)
  84. {
  85. return (float) Math.Sin((double) f);
  86. }
  87. public static float Cos(float f)
  88. {
  89. return (float) Math.Cos((double) f);
  90. }
  91. public static float Tan(float f)
  92. {
  93. return (float) Math.Tan((double) f);
  94. }
  95. public static float ASin(float f)
  96. {
  97. return (float) Math.Asin((double) f);
  98. }
  99. public static float ACos(float f)
  100. {
  101. return (float) Math.Acos((double) f);
  102. }
  103. public static float ATan(float f)
  104. {
  105. return (float) Math.Atan((double) f);
  106. }
  107. public static float ATan2(float a, float b)
  108. {
  109. return (float) Math.Atan2((double) a, (double) b);
  110. }
  111. public static float Sqrt(float f)
  112. {
  113. return (float) Math.Sqrt((double) f);
  114. }
  115. public static float Abs(float f)
  116. {
  117. return Math.Abs(f);
  118. }
  119. public static int Abs(int value)
  120. {
  121. return Math.Abs(value);
  122. }
  123. public static float Pow(float fBase, float fExponent)
  124. {
  125. return (float) Math.Pow((double) fBase, (double) fExponent);
  126. }
  127. public static float Exp(float power)
  128. {
  129. return (float) Math.Exp((double) power);
  130. }
  131. public static float Log(float f)
  132. {
  133. return (float) Math.Log((double) f);
  134. }
  135. public static float Log10(float f)
  136. {
  137. return (float) Math.Log10((double) f);
  138. }
  139. public static float Ceil(float f)
  140. {
  141. return (float) Math.Ceiling((double) f);
  142. }
  143. public static float Floor(float f)
  144. {
  145. return (float) Math.Floor((double) f);
  146. }
  147. public static float Round(float f)
  148. {
  149. return (float) Math.Round((double) f);
  150. }
  151. public static int ICeil(float f)
  152. {
  153. return (int) Math.Ceiling((double) f);
  154. }
  155. public static int IFloor(float f)
  156. {
  157. return (int) Math.Floor((double) f);
  158. }
  159. public static int IRound(float f)
  160. {
  161. return (int) Math.Round((double) f);
  162. }
  163. public static bool IsPowerOfTwo(int value)
  164. {
  165. return (value & value - 1) == 0;
  166. }
  167. public static int NextPowerOfTwo(int v)
  168. {
  169. --v;
  170. v |= v >> 16;
  171. v |= v >> 8;
  172. v |= v >> 4;
  173. v |= v >> 2;
  174. v |= v >> 1;
  175. return v + 1;
  176. }
  177. }
  178. }