acosf() 返回 NaN

2024-01-28

我有一个用 Objective C 编写的 iPhone 应用程序,我在其中收集用户在屏幕上绘制的触摸点以创建路径。

我希望能够精简这些数据。我的目标之一是检查点的角度是否超过某个阈值。例如,如果我在名为 a、b、c 的线上取任意三个相邻点,如果角度 ABC 在 180 度的 5 度范围内,那么我可以删除点 b,而不会对该线产生太大影响。

我试图通过将三角形 ABC 分成 2 个直角三角形来实现此目的。然后我使用 acosf() 求 a 处的角度 (BAC) 和 c 处的角度 (BCA)。然后我可以用 180 减去这两个角度来找到 ABC 的角度。

我的问题是 acosf() 经常返回 NaN。当它返回一个数字时,我在计算器上检查了它,该值是正确的。我尝试过返回 NaN 的值,但它们也不适用于计算器。我知道这是因为它们超出了 acosf() 的范围。我怎样才能避免这种情况?

这是我正在使用的代码:

float prevToNextDist = ccpDistance(prevPoint.location, nextPoint.location);
    //work out the next point angle
    float pointToNextDistance = ccpDistance(point.location, nextPoint.location);
    float nextPointAngle = acosf((prevToNextDist/2)/pointToNextDistance);
    nextPointAngle = CC_RADIANS_TO_DEGREES(nextPointAngle);

    //work out the previous point angle
    float prevToPointDistance = ccpDistance(prevPoint.location, point.location);
    float prevPointAngle = acosf((prevToNextDist/2)/prevToPointDistance);
    prevPointAngle = CC_RADIANS_TO_DEGREES(prevPointAngle);

    //work out the point angle
    float pointAngle = 180 - nextPointAngle - prevPointAngle;

有任何想法吗?


一个经典问题acos(x) and acosf(x)确保参数在范围内。

有时计算出来的x is just由于各种 FP 问题,超出了 -1 x可能在范围内,但舍入/精度有时会出现类似的值1.0000001。有了这个值x (to 8小数位),那么acosf(x) is NaN?

另一种方法是测试是否x超出安排并将其带入。

if (x > 1.0) {
  x = 1.0;
}
else if (x < -1.0) {
  x = -1.0;
}
angle = acos(x);

更远:acosf()仅提供 180 度 [0 到 pi] 的范围。对于您的任务,您可能需要使用atan2f()。它提供了一个完整的答案“圈”。

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

acosf() 返回 NaN 的相关文章

  • 如何在 Qt Creator 中编辑 QtWebKit 的右键上下文菜单?

    好吧 这是我的困境 我正在使用 Qt Creator 制作一个使用 Webkit 的简单应用程序 我认为 Qt Creator 会有一种简单的方法来使用信号和槽编辑器编辑右键单击上下文菜单 但事实证明这不是真的 我知道 webkit 有与上
  • Bjarne Stroustrup 的 C++ 编程和实践第 2 版中的使用单参数排序

    我正在阅读 Bjarne Stroustrup new C PP 第二版 他在其中使用了排序方法 sort someVector 使用此方法编译代码时出现以下错误 3 IntelliSense 没有重载函数 sort 的实例与参数列表匹配
  • 路径不是有效的虚拟路径

    下面的方法采用指向 xml 文件的路径 tree LoadContentFile path 我从本地文件系统传递完整路径 或使用Server MapPath 但每次我总是收到此错误 Path 不是有效的虚拟路径 编辑 我正在使用Teleri
  • WriteLine 与类

    我正在制作一个 SchoolApp 程序来学习 C 并且我正在尝试实现以下主要功能 namespace SchoolApp class Program public static void Main string args School s
  • 从字符串初始化单元

    我正在寻找一个Unit symbol String 一种初始化程序认出 不定义符号 这是一个代码片段 通过提供来说明我的问题有限解 to it 尽管下面的解决方案有效 但明确列出了基础框架如果 Apple 在即将推出的 iOS 更新中发布新
  • 如何访问UPnP设备的服务?

    设备 贝尔金 WeMo Switch开发环境 Windows 7 上的 MS VC 2010 我正在尝试使用 Windows 中的 C 枚举 UPnP 设备的服务 我有IUPnPDevice指针并可以访问多个属性 我有IUPnPServic
  • 如何确定一个值是否在某个范围内?

    我对 C 语言比较陌生 不幸的是我必须在学校做这件事 而且我在最简单的练习中遇到了问题 这里我必须检查一个数字是否在某个区间内 例如4到6之间 我是这样制作的 include
  • 实体框架 6 - 使用我的 getHashCode()

    这篇文章需要了解一定的背景知识 请耐心等待 我们有一个使用 EF 的 n 层 WPF 应用程序 我们通过 dbContext 将数据从数据库加载到 POCO 类中 dbContext 被销毁 然后用户可以编辑数据 我们使用 Julie Le
  • 如何在 C++ 中创建动态整数数组?

    如何使用 C 创建动态整数数组new关键词 int main int size std cin gt gt size int array new int size delete array return 0 别忘了delete你分配的每个数
  • C++ 将 HashMap 对象返回给 Java

    我有一个 JAVA 调用的 JNI 函数 需要构建并返回一个 HashMap 映射的键是 String 相应的值是 boolean 或 Boolean 任何一个都可以 只要它有效 使用我当前的代码 如下 该字符串已成功添加到返回的映射中 并
  • 强名称验证失败

    两台机器 均带有 NET 3 5 和 VS 2008 VC SP1 可再发行组件 单个 exe 使用两个签名的 DLL 一个在 C CLI 中 一个在 C 中 该exe在一台机器上加载并运行良好 另一方面 我在 C 可执行文件上收到 强名称
  • Boost MPL 生成对象序列化代码?

    我想生成序列化 反序列化代码 class Object string a int b long c char d 通过查看 mpl 序列 但我需要能够识别对象并将其检索回来 我不知道如何获取它的成员的名称 我必须知道吗 代码应该看起来像 v
  • cppcheck 找不到包含文件

    cppcheck 甚至找不到标准标头 例如 iostream 有任何想法吗 我正在使用 Ubuntu 11 04 和存储库中的 cppcheck cppcheck 在 Mac 和 Linux 上查找标准包含头确实很糟糕 幸运的是 您可以取消
  • 从 Silverlight 中的文件夹加载资源“.resx”

    我有一个多语言应用程序 客户想要按照他的意愿编辑 Resources resx 文件 我创建了 silverlight 项目并添加了一些文件 资源 resx 资源 en US resx1 资源 uk UA resx2 他们都有构建操作 嵌入
  • C 中的结构和联合,确定大小和访问成员

    All 这是一个关于 Unions 的例子 我觉得它令人困惑 struct s1 int a char b union struct char c long d long e var 考虑到char是1个字节 int是 2 个字节并且lon
  • ARC-- 隐式桥接

    如果我理解正确的话我们可以分类void as a C 可保留指针类型 因此 将其分配给 Objective C 对象将被隐式桥接 但是 编译器会引发需要显式桥接的错误 const void somePtr void 0x12345678 v
  • 隐藏 AppBar 中的省略号

    当您在 UWP 应用中创建 AppBar 或 CommandBar 时 控件侧面附近总会隐藏一个省略号 如下所示 我不想在我的应用程序中使用它 但我没有在其中找到任何方法 属性AppBar这会帮助我摆脱它 这应该是可能的 因为许多默认的 W
  • 为什么&在变量之前使用?

    Why is 之前在这里使用过decks scanf i decks 如果我的输入是像 k 这样的任何字母 那么它会显示像 1929597720 这样的输出 为什么 include
  • 仅针对具有 callayer 的cornerRadius 的某些角的圆角图像

    我试图只圆化图像的左上角 因此它无法适当地适合组样式的表视图单元格 我可以使用下面的代码将 4 个角圆化 有谁知道一种简单的方法可以使一个角变圆 cell imageView layer masksToBounds YES cell ima
  • 在 Qt 服务器上验证用户身份

    我正在尝试使用 C QtTcpSocket 为个人项目 多人国际象棋游戏 实现身份验证系统 我的朋友建议了一种验证用户的方法 但我想问是否有更简单或更好的方法 来自 Python 背景 做这个项目主要是为了加深对 C 的理解 我将发布我朋友

随机推荐

  • Android 相当于 iOS MobileSubstrate 风格的挂钩吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 列表理解与映射

    有理由更喜欢使用map https docs python org 3 8 library functions html map过度列表理解还是反之亦然 它们中的任何一个通常比另一个更高效还是被认为更Pythonic map在某些情况下 微
  • C++ 参考——它们只是语法糖吗?

    C 参考只是语法糖 还是在某些情况下提供任何加速 例如 无论如何 指针调用都涉及副本 对于引用调用似乎也是如此 基本机制似乎是相同的 编辑 在大约六个答案和许多评论之后 我仍然认为引用只是语法糖 人们是否可以直接回答 是 或 否 以及是否有
  • 以批处理模式运行时提示输入 SAS ODBC 连接密码

    由于各种原因 我更喜欢尽可能以批处理模式运行 SAS 程序 出于安全原因 我希望每当与 Teredata 仓库建立 ODBC 连接时 SAS 都会提示我输入密码 我可以同时拥有这两个东西吗 以下代码在从 SAS 交互运行时工作正常 但在批量
  • 在 C 函数声明中,“...”作为最后一个参数的作用是什么?

    我经常看到这样声明的函数 void Feeder char buff 这是什么意思 它允许可变数量的未指定类型的参数 例如printf does 您必须使用以下命令访问参数va start va arg and va end功能 See h
  • ZipException:重复条目:com/google/android/gms/internal/zzbtt.class

    错误 任务 app transformClassesWithJarMergingForDebug 执行失败 com android build api transform TransformException java util zip Z
  • ol/ul 应该在

    内部还是外部?

    这两者之间哪个符合标准 p Text text text p ol li First element li ol p Other text text p OR p Text text text p ol li First element l
  • 在 MySQL 插入语句中使用 Python 变量

    我已经尝试了一段时间了 在网上查了一下 但无法弄清楚 变量是numbers and animals sql INSERT INTO favourite number info VALUES numbers animals cursor ex
  • 在 MVC Core 应用程序中使用 AddAzureADB2C 时向 ClaimsPrincipal 添加自定义声明

    使用 azure AzureADB2C 进行身份验证时 我想将在门户中管理的自定义声明添加到声明原则 current code in start up services AddAuthentication AzureADB2CDefault
  • 一次读取时按长度对文件中的所有单词进行排序。 (爪哇)

    我的数据结构课的作业是找到从一个单词到另一个单词的最短路径 即开始 流血 gt 混合 gt 金发 gt 结束 血液 成本为 3 我得到了一个单词列表 我必须使用地图对其进行分组 在哪里 键 单词的长度 值 具有该长度的所有单词的集合 我已经
  • “双重”分配——应该避免吗?

    考虑一下你有一些像这样的表达 i j 0 假设这是在您选择的语言中明确定义的 通常将其分成两个表达式会更好吗 i 0 j 0 我有时会在库代码中看到这一点 就简洁性而言 它似乎并没有给您带来太多好处 并且不应该比这两个语句执行得更好 尽管这
  • Hazelcast 中基于时间的驱逐

    我正在满足一个要求 即我有 N 个 hazelcast 实例在集群中运行 并且 kafka 消费者在所有实例上运行 现在的问题是 kafka 上传入的每条消息都应添加到分布式映射中 并且必须每 20 秒驱逐该条目 这是我通过在映射中结合使用
  • Lint-staged 找不到与 glob 匹配的暂存文件

    我正在使用 NodeJS Typescript 我想设置lint staged在提交之前验证我的文件 但它不起作用 我从指南中添加如下 husky hooks pre commit lint staged lint staged js js
  • 如何将数组中的值复制到新数组中?

    我已经断断续续地尝试解决这个问题一个星期了 但我不断遇到问题 我的目标 编写一个为整数数组分配内存的函数 该函数将整数指针 数组大小和要分配的 newSize 作为参数 该函数返回一个指向分配的缓冲区的指针 第一次调用该函数时 大小将为零并
  • 获取与 XEP-0313 每次对话的最后一条消息?

    我正在使用一个 XMPP 服务器来实现XEP 0313 http xmpp org extensions xep 0313 html用于检索对话历史记录 我只想获取每个对话的最后一条消息 以便我可以构建您最近的对话列表 预览最后一条消息 我
  • CALL 命令与带 /WAIT 选项的 START 命令

    带有 WAIT 选项的 START 命令如何 START wait notepad exe START wait notepad exe 与使用 CALL 命令有什么不同吗 CALL notepad exe CALL notepad exe
  • 在 32 位 .NET 进程中分配超过 1,000 MB 的内存

    我想知道为什么我无法在 32 位 NET 进程中分配超过 1 000 MB 的内存 以下迷你应用程序在分配 1 000 MB 后抛出 OutOfMemoryException 为什么是 1 000 MB 而不是 1 8 GB 是否有我可以更
  • Java 中 JTable 的 JDBC TableModel?

    我想将数据库表显示为 JTable 我以前从未使用过 JTable 所以我用 google 搜索了 JTable 和 TableModel 通过谷歌搜索 我可以编写自己的自定义 TableModel 它显示存储在中的数据 Object da
  • 如何在 android 中使用 java 8 库?

    我正在尝试在我的 android 项目中使用一个使用 java 8 的库 我无法找到一种方法来完成这项工作 我尝试过使用复古 lambda 但没有帮助 我不断收到错误 com android dx cf iface ParseExcepti
  • acosf() 返回 NaN

    我有一个用 Objective C 编写的 iPhone 应用程序 我在其中收集用户在屏幕上绘制的触摸点以创建路径 我希望能够精简这些数据 我的目标之一是检查点的角度是否超过某个阈值 例如 如果我在名为 a b c 的线上取任意三个相邻点