将十进制数保留在

时间:2015-05-22 11:41:42

标签: c++ decimal angle

如果我有一个表示角度的十进制数字并将其添加到另一个角度,我怎样才能确保它保持在0°和359°之间?因此,如果它是120°+ 270°,它将是30°而不是390°?我可以检查它们是否高于或低于极限然后加或减360°,但如果它最终超过360°会怎样?我会使用modulo,但我不确定这对小数和负数有什么作用。我也可以使用一个循环来添加/减去360,直到它在范围内,但我不确定这是不是一个好主意。 (我实际上是用弧度来做这个,用度数来解释更容易)

1 个答案:

答案 0 :(得分: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