惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
博客园 - 司徒正美
D
Docker
T
The Blog of Author Tim Ferriss
罗磊的独立博客
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
J
Java Code Geeks
Jina AI
Jina AI
博客园 - 【当耐特】
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog

博客园 - Fitz

windows server2012 安装IIS6服务,编译器错误消息: CS0016: 未能写入输出文件“c:\*\App_Code.*.dll”--“拒绝访问。 ” - Fitz ollama 安装好之后,是不是还需要关闭一些配置? 赫尔默特变化 A=0的情况 libaom 在ubuntu 上用鸿蒙OHOS编译 如何将带有线网卡和无线网卡的台式机作为网关/路由器 相机标定 像元大小(例如 1.4 µm × 1.4 µm)具体的含义和用途 物理焦距、像素焦距、像元与相机内参(fx, fy)的意义与作用 如何使用像素坐标和相机内参来计算夹角 HarmonyOS Next Native C++ 开发入门 Ubuntu中用HarmonyOS Next的SDK编译libsodium,并在DevEco Studio中加载运行.a库 windows 编译rustdesk The authenticity of host '[ssh.github.com]:443([*]:443)' can't be established. ED25519 key fingerprint is matlab 云台控制 根据图像中目标位置,控制望远镜/摄像头转向目标方向 无深度方向估计 Ubuntu 安装conda 拍摄目标:采集 1000 张多样化的图片,覆盖目标的各种环境、角度、光照、尺寸和位置,提高模型的泛化能力。 android APK的MD5值获取有效办法 3D 汽车模拟器 Three.js
测绘中2个角度相减对于跨360问题的算法总结
Fitz · 2026-04-21 · via 博客园 - Fitz

我们讨论的关键是角度差值是否应该规范化到 [-180°, 180°] 这个范围内。跨越360° 的真正意思是“顺时针还是逆时针旋转”,而不仅仅是差值是否大于180°。我们需要明确地理解两种情况:

  1. 差值大于 180° 时,表示应该逆时针转动,需要减去360°,以使差值进入 [-180°, 180°] 范围。
  2. 差值小于 -180° 时,表示应该顺时针转动,需要加上360°,同样为了使差值在 [-180°, 180°] 范围内。
  3. 让我们来看一下具体情况:

    1. 角度差计算的核心

    假设有两个角度,angle1angle2,我们计算其差值 diff = angle1 - angle2,然后做规范化。规范化就是:

    • 如果差值大于 180°,这意味着已经跨越了 360°,需要减去 360°。
    • 如果差值小于 -180°,这意味着已经跨越了 -360°,需要加上 360°。
    • 否则,差值本身已经在合理范围内,不需要修改。

    2. 举个例子

    例子 1:angle1 = 270°angle2 = 10°

    • 差值计算:

      diff=270∘−10∘=260∘\text{diff} = 270^\circ - 10^\circ = 260^\circdiff=27010=260
    • 由于差值 260° 大于 180°,应该规范化为 -100°,即将 260° 减去 360°:

      260∘−360∘=−100∘260^\circ - 360^\circ = -100^\circ260360=100

      这代表从 270° 逆时针转到 10° 的差值是 -100°,符合预期。

    例子 2:angle1 = 10°angle2 = 270°

    • 差值计算:

      diff=10∘−270∘=−260∘\text{diff} = 10^\circ - 270^\circ = -260^\circdiff=10270=260
    • 由于差值 -260° 小于 -180°,应该规范化为 100°,即将 -260° 加上 360°:

      −260∘+360∘=100∘-260^\circ + 360^\circ = 100^\circ260+360=100

      这代表从 270° 顺时针转到 10° 的差值是 100°,符合预期。

    • public double calculateAngleDifference(double angle1, double angle2) {
          // 计算原始角度差
          double diff = angle1 - angle2;
          
          // 规范化差值到[-180°, 180°]
          if (diff > 180) {
              diff -= 360;  // 角度差大于180°,跨越了360°
          } else if (diff < -180) {
              diff += 360;  // 角度差小于-180°,跨越了-360°
          }
          
          // 返回规范化后的差值
          return diff;
      }

      4. 示例

      • angle1 = 270°angle2 = 10°:计算 270° - 10° = 260°,然后规范化为 -100°
      • angle1 = 10°angle2 = 270°:计算 10° - 270° = -260°,然后规范化为 100°

      5. 总结

      • 正确的差值规范化:无论差值是正还是负,超出180°或-180°时,应该加/减360°,确保角度差落在 [-180°, 180°] 范围内。
      • 跨越360°的判断:是基于差值本身是否超过了180°,而不仅仅是判断是否“跨越”360°,需要对差值进行适当调整。