gpt4 book ai didi

c++ - 圆上两个度数标记之间的最短距离?

转载 作者:可可西里 更新时间:2023-11-01 15:39:15 25 4
gpt4 key购买 nike

我正在寻找一个公式来找到圆上两个度数标记之间的最短距离(度数):例如,30 度和 170 度(140 度)。

两个度数标记几乎可以是任何实数,不一定介于 0 和 360 之间(可以是负数,或远大于 360,例如 -528.2 和 740(即 171.8 度))。但是,距离应始终 <= 180 度且 >= 0 度。

听起来很简单。但是,我一直在尝试为此找到一个好的解决方案,并且我尝试了很多不同的代码,但到目前为止我发现在我尝试过的所有情况下都不起作用。我在 C++ 工作。有人有什么想法吗?

最佳答案

  • 第 1 步:获取“原始”差异。例如,给定 -528.2740.0,这是 1268.2

    • 一种方式:raw_diff = first > second ?第一-第二:第二-第一
    • 另一种方式:raw_diff = std::fabs(first - second)
  • 第 2 步:减去 360.0 的倍数以获得 0.0(含)和 360.0(不含)之间的值。

    • mod_diff = std::fmod(raw_diff, 360.0)
  • 第 3 步:如果此值大于 180.0,则从 360.0 中减去它。

    • 一种方式:dist = mod_diff > 180.0 ? 360.0 - mod_diff:mod_diff
    • 另一种方式:dist = 180.0 - std::fabs(mod_diff - 180.0)

作为一系列语句,它可能是最具可读性的:<​​/p>

double raw_diff = first > second ? first - second : second - first;
double mod_diff = std::fmod(raw_diff, 360.0);
double dist = mod_diff > 180.0 ? 360.0 - mod_diff : mod_diff;

但如果需要,将其全部放入一个表达式中并不难:

180.0 - std::fabs(std::fmod(std::fabs(first - second), 360.0) - 180.0)

关于c++ - 圆上两个度数标记之间的最短距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9505862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com