OSDN Git Service

faster2
[psychlops/silverlight.git] / dev4 / psychlops / core / math / util.cs
1 using System;\r
2 \r
3 namespace Psychlops\r
4 {\r
5 \r
6         public static class Math\r
7         {\r
8                 public static readonly double PI = 3.14159265, E = 2.718281828459045, LOG2E = 1.44269504088896340736;\r
9                 public static Random random_generator;\r
10                 static Math()\r
11                 {\r
12                         random_generator = new Random();\r
13                 }\r
14 \r
15                 public static double max(double val1, double val2)\r
16                 {\r
17                         return val1 > val2 ? val1 : val2;\r
18                 }\r
19                 public static double min(double val1, double val2)\r
20                 {\r
21                         return val1 < val2 ? val1 : val2;\r
22                 }\r
23                 public static void shuffle<X>(X[] array, int n)\r
24                 {\r
25                         int a;\r
26                         X tmp;\r
27                         for(int i = 1; i < n; i++){\r
28                                 a = random(i + 1);\r
29                                 tmp = array[i];\r
30                                 array[i] = array[a];\r
31                                 array[a] = tmp;\r
32                         }\r
33                 }\r
34 \r
35 \r
36                 public static double mod(double lhs, double rhs)\r
37                 {\r
38                         return lhs - System.Math.Floor(lhs/rhs)*rhs;\r
39                 }\r
40                 public static double abs(double x)\r
41                 {\r
42                         return System.Math.Abs(x);\r
43                 }\r
44                 public static double sin(double x)\r
45                 {\r
46                         return System.Math.Sin(x);\r
47                 }\r
48                 public static double cos(double x)\r
49                 {\r
50                         return System.Math.Cos(x);\r
51                 }\r
52                 public static double tan(double x)\r
53                 {\r
54                         return System.Math.Tan(x);\r
55                 }\r
56                 public static double sqrt(double x)\r
57                 {\r
58                         return System.Math.Sqrt(x);\r
59                 }\r
60                 public static double exp(double x)\r
61                 {\r
62                         return System.Math.Exp(x);\r
63                 }\r
64                 public static double log(double x)\r
65                 {\r
66                         return System.Math.Log(x);\r
67                 }\r
68                 public static double log2(double val)\r
69                 {\r
70                         return log(val) * LOG2E;\r
71                 }\r
72                 /*public static int round(double val)\r
73                 {\r
74                         double integer_part, particle = modf(val, &integer_part);\r
75                         return ((particle < 0.5 | (particle == 0.5 && (int)integer_part % 2 == 0)) ? (int)integer_part : (int)integer_part + 1);\r
76                 }*/\r
77 \r
78                 public static double radius(double x, double y)\r
79                 {\r
80                         return System.Math.Sqrt(x * x + y * y);\r
81                 }\r
82 \r
83                 public static double random()\r
84                 {\r
85                         return (random_generator.NextDouble());\r
86                 }\r
87                 public static int random(int x)\r
88                 {\r
89                         return (int)((random_generator.NextDouble()) * x);\r
90                 }\r
91                 public static double random(double x)\r
92                 {\r
93                         return (random_generator.NextDouble()) * x;\r
94                 }\r
95                 public static double random(double x, double y)\r
96                 {\r
97                         return (random_generator.NextDouble()) * (y-x) + x;\r
98                 }\r
99 \r
100 \r
101                 public static double gaussian(double x, double sigma)\r
102                 {\r
103                         return exp(- (x*x) / (2*sigma*sigma));\r
104                 }\r
105         }\r
106 \r
107 }