两个角度之间的最小差?

2023-11-21

我正在尝试计算两个角度之间的最小差异。

这是我当前的代码(与我在网上找到的代码略有不同):

float a1 = MathHelper.ToDegrees(Rot);
float a2 = MathHelper.ToDegrees(m_fTargetRot);

float dif = (float)(Math.Abs(a1 - a2);

if (dif > 180)
  dif = 360 - dif;

dif = MathHelper.ToRadians(dif);

除了在圆边缘的情况外,它工作得很好。例如,如果当前角度为 355,目标角度为 5,则计算出的差值为 -350,而不是 10,因为 365 度等于 5 度。

关于我可以做些什么来完成这项工作有什么想法吗?


你基本上已经有了。只需取 diff 模数 360,然后检查是否大于 180:

float a1 = MathHelper.ToDegrees(Rot);
float a2 = MathHelper.ToDegrees(m_fTargetRot);

float dif = (float)Math.Abs(a1 - a2) % 360;

if (dif > 180)
    dif = 360 - dif;

dif = MathHelper.ToRadians(dif);

Edit:@Andrew Russell 在对您的问题的评论中提出了一个很好的观点,下面的解决方案利用了 MathHelper.WrapAngle 方法,正如他所建议的:

diff = Math.Abs(MathHelper.WrapAngle(a2 - a1));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个角度之间的最小差? 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • PyInstaller 打包的应用程序在控制台模式下工作正常,在窗口模式下崩溃

    我正在使用 Python 和 PySide 构建一个相当复杂的应用程序 发布的日子终于临近了 所以我想将此应用程序构建为 exe 然而 我手上有一个奇怪的问题 我过去使用过 PyInstaller 顺便说一下 使用版本 2 但从未发生过这种
  • 如何以编程方式编译和实例化 Java 类?

    我将类名存储在属性文件中 我知道类存储将实现 IDynamicLoad 如何动态实例化该类 现在我有 Properties foo new Properties foo load new FileInputStream new File C
  • 在 Subversion 中替换整个目录树的最佳方法?

    在我的 Subversion 项目中 我有一些目录 其中包含我的代码所需的其他开源项目 例如 ffmpeg freetype matrixssl 和其他一些 更新 SVN 以保存这些项目之一的最新版本的最佳方法是什么 本质上我将执行以下操作
  • 什么机制允许 ViM 暂时覆盖整个控制台?

    当你进入vim 它 清除 屏幕 退出后 它会 恢复 原始内容 我知道可以使用 x1b 2J清除控制台并重置光标位置 但这将覆盖终端内容 我假设 Vim 使用ncurses在幕后 我想更好的问题是 ncurses 如何做到这一点 但它是如何完
  • 当 UAC 被拒绝时 Process.Start 永远不会返回

    我有一个更新程序 exe 旨在关闭主 exe 将其替换为更新的 exe 然后启动该更新的 exe 当更新程序尝试启动更新的 exe 时 如果用户拒绝 UAC 权限对话框 更新程序将挂起 这是因为Process Start 函数永远不会返回
  • mongodb $regex 中排序规则的使用

    由于 v3 4 排序规则可用于查找操作 尤其是在涉及变音符号匹配时 虽然具有确定值 eq 运算符或相应构造 的查找查询将匹配字母和相应的变音符号 但如果使用 regex 来实现部分搜索字符串 LIKE 的匹配 则情况并非如此 是否可以使 r
  • 解决 MSB3247 - 发现同一依赖程序集的不同版本之间存在冲突

    使用 msbuild 编译时 NET 3 5 解决方案最终出现此警告 有时 NDepend 可能会有所帮助 但在这种情况下 它没有提供任何进一步的详细信息 Like Bob我最终不得不在 ILDASM 中打开每个程序集 直到找到引用旧版本依
  • 在文本文件中查找特定单词并对其进行计数

    有人可以帮我写代码吗 如何在文本文件中搜索任何单词并计算其重复次数 例如测试 txt hi hola hey hi bye hoola hi 如果我想知道 test txt 中单词 Hi 重复了多少次 程序必须说 3次重复 希望您能明白我的
  • 在 Java 中编写布尔表达式的首选方法是什么

    我总是这样写布尔表达式 if isValid code 但我的新雇主坚持以下风格 if false isValid code 是首选一种样式还是标准样式 我更喜欢第一种风格 因为它对我来说阅读起来更自然 第二种风格很不寻常 有些人可能更喜欢
  • 为什么Python中的破折号写成'\xe2\x80\x93'?

    具体来说 每个转义是什么 xe2 x80 x93为什么需要 3 次转义 尝试单独解码会导致 数据意外结束 错误 gt gt gt print b xe2 x80 x93 decode utf 8 gt gt gt print b xe2 d
  • 如何实现无锁但阻塞的行为?

    我正在为密集型网络应用程序实现一个无锁的单生产者单消费者队列 我有一堆工作线程在它们自己的单独队列中接收工作 然后它们将其出队并进行处理 去掉这些队列的锁 大大提高了高负载下的性能 但当队列为空时它们不再阻塞 进而导致CPU使用率飙升 如何
  • 如何在Java中创建进程[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想在我的应用程序中创建一个流程 但在查看了 Java 的 API 后 我仍然不太明白 基本上我想创建一个多进程应用程序 但新流程是我的应用程序中的
  • C++:参数传递“通过引用传递”

    我理解与任何其他变量一样 参数的类型决定了参数与其参数之间的交互 我的问题是 为什么您会引用参数 而为什么不引用参数背后的原因是什么 为什么有些函数参数可以引用 有些则不能 无法理解这样做的好处 有人可以解释一下吗 通过引用传递的能力存在有
  • Windows 桌面应用程序的使用情况跟踪[关闭]

    Closed 这个问题是无关 目前不接受答案 我正在寻找一些可用于收集 Windows 桌面应用程序的使用信息并对其进行分析的框架 例如 我希望能够回答以下问题 a 人们一天内使用此应用程序多少次 b 他们最喜欢的菜单项等 我简单地浏览了
  • 如何在终端中更改我的 Git 用户名?

    我在终端中从 git 进行推送和拉取 然后在 github com 上更改了我的用户名 我去推送一些更改 但它无法推送 因为它仍然识别我的旧用户名 如何在终端中的 git 上更改 更新我的用户名 在您的终端中 导航到您想要进行更改的存储库
  • 跟踪 YouTube 观看历史记录

    为了自动跟踪我的时间 我想获取我的观看历史记录 最好的情况 每天一次 最坏的情况是每分钟一次 并将其添加为 Google 日历事件 虽然我成功添加了 Google 日历活动 但无法获取 YouTube 观看历史记录 所以我想知道 v3 AP
  • 捕获动态添加到 Jquery Datatables 表的输入字段上的更改事件

    我有一个 ajax 调用 它使用以下代码为响应中的每条记录添加一些行到数据表中 strAppName data Application Name maintCost
  • Eclipse:这些 JSP 错误是什么?

    我继承了一个 Web 应用程序 当在 Eclipse 中设置它时 它显示特定 JSP 中的错误 这些错误在 Problems 视图中没有与之相关的描述 单击它们会将我带到 JSP 的顶部 其中红色错误下划线出现在字符串的中间 如下所示 想象
  • jQuery动态改变元素高度

    我正在开发一个流体布局项目 我的文档中有一些固定高度的 DIV 并且它们的高度都不同 我需要在浏览器调整大小时按比例更改这些 DIV 高度 这是标记 div class target div div class target div div
  • 两个角度之间的最小差?

    我正在尝试计算两个角度之间的最小差异 这是我当前的代码 与我在网上找到的代码略有不同 float a1 MathHelper ToDegrees Rot float a2 MathHelper ToDegrees m fTargetRot