| 170 | } |
| 171 | |
| 172 | float AtanF(float X) //assume 0.0 < X < 1.0 |
| 173 | { |
| 174 | float Eps = 1.0e-8f; |
| 175 | int i = 1; |
| 176 | float X2 = X * X; |
| 177 | float D = X; |
| 178 | float Y = 0.f; |
| 179 | float sign = 1.0f; |
| 180 | |
| 181 | if (X > 0.5f) { |
| 182 | //make here arctg(1-x) |
| 183 | X = 1.0f - D; |
| 184 | X2 = X * X; |
| 185 | Y = PI4 - X * 0.5f - X2 * 0.25f - X * X2 * 0.25f * ( 1.f / 3.f - X2 * (0.1f + X / 12.f + X2 / 28.f)); |
| 186 | } else { |
| 187 | // Y = X * (1 - X2 * ( 1.0f / 3.0f - X2 * (1.0f / 5.0f - X2 * ( 1.0f / 7.0f)))); |
| 188 | for (i = 1; i < 50; i += 2) { |
| 189 | Y += (D * sign / i); |
| 190 | D *= X2; |
| 191 | if (D < Eps) { |
| 192 | break; |
| 193 | } |
| 194 | sign = - sign; |
| 195 | } |
| 196 | } |
| 197 | return Y; |
| 198 | } |
| 199 | |
| 200 | float Atan2F(float Y, float X) //result -pi..+pi |
| 201 | { |