2015-05-22 30 views
1

如果我有一个十进制数表示一个角度,并将其添加到另一个角度,我如何确保它保持在0°和359°之间?所以如果它是120°+ 270°,它将是30°而不是390°?我可以检查它们是高于还是低于极限,然后加上或减去360°,但如果结束超过360°,会怎么样?我会使用模数,但我不确定这是如何与小数和负数。我也可以使用一个循环来增加/减少360,直到它在范围内,但我不确定这是个好主意。 (我实际上是用弧度做这个,只是用度来解释就好了)保留一个范围内的十进制数

回答

4

你可以使用模数运算。用整数这是%操作,用浮漂,你可以使用std::fmod

// \brief Calculates the sum of two angles 
// \param[in] a First angle [degrees] 
// \param[in] b Second angle [degrees] 
// \return Sum of two angles [degrees, [0, 360)] 
double AddAngles(double a, double b) 
{ 
    const double totalAngle = a + b; 
    if (totalAngle >= 0.0) 
    { 
     return std::fmod(totalAngle, 360.0); 
    } 
    else 
    { 
     return 360.0 - std::fmod(-totalAngle, 360.0); 
    } 
} 

Demo

int main() 
{ 
    std::cout << AddAngles(30.0, 450.0) << std::endl 
       << AddAngles(50.0, 80.0) << std::endl 
       << AddAngles(180.0, 180.0) << std::endl 
       << AddAngles(-180.0, -270.0) << std::endl; 
} 

输出

120 
130 
0 
270 
+0

'FMOD()'是声明的函数。它不是一个运营商。 – Peter

+0

好的。当我编写并输入我的评论时,你没有提及'%'操作符。 – Peter

+0

@ Hop311顺便说一句,你可以计算'2 * PI'为'const double PI_2 = std :: atan(1.0)* 8.0;'。你可以用'PI_2'替换掉所有'360.0',这个函数将以弧度而不是度数工作。 – CoryKramer