[an error occurred while processing this directive]
|
примерно так
SFLOAT arctg2 (SFLOAT SIN, SFLOAT COS)
// 0 <= arctg2 <= 2*M_PI
{
SFLOAT ret = 0.0;
if (COS > +1E-10) {
if (SIN > +COS) {
ret = (+M_PI/2.0 - arctg1 (COS/SIN));
}else if (SIN < -COS) {
ret = (+3.0*M_PI/2.0 - arctg1 (COS/SIN));
}else { // |SIN| < |COS|
if (SIN >= 0.0) {
ret = arctg1 (SIN/COS);
}else { // SIN < 0
ret = 2.0*M_PI + arctg1 (SIN/COS);
}
}
}else if (COS < -1E-10) {
if (SIN < +COS) { // SIN < 0, |SIN| > |COS|
ret = (+3.0*M_PI/2.0 - arctg1 (COS/SIN));
}else if (SIN > -COS) { // SIN > 0, |SIN| > |COS|
ret = (+M_PI/2.0 - arctg1 (COS/SIN));
}else { // |SIN| < |COS|
ret = (M_PI + arctg1 (SIN/COS));
}
}else {
if (SIN > 0.0) {
return +M_PI/2.0;
}else {
return +3.0*M_PI/2.0;
}
}
return ret;
}/*arctg2*/
E-mail: info@telesys.ru