[an error occurred while processing this directive]
|
основная формула: atan(x)+atan(y) = atan((x+y)/(1-x*y))
на вход подаём X. Y = максимальное из 1/n, 2/n.... k/n меньшее или равное X
z=(X-Y)/(1+X*Y), z<=1/n
в зависимости от n для вычисления atan(z) необходим полином той или иной степени. для n=32 хватает 3-й.
в итоге: atan(X) = atan(z) + atan(Y)
Типа "код" для случая когда 0<=X<=1.0 :
int pos = X*32.0f;
float arg = (X - atanarg[pos])/(1.0f + X*atanarg[pos]);
float arg2 = arg*arg;
return arg * (1.0f - arg2 * 0.3332f);
E-mail: info@telesys.ru