检测直角三角形的C程序

2024-01-03

如果给我坐标系中的 100 个点,我必须找出这些顶点中是否存在直角三角形。 有没有一种方法可以检测这些顶点中的直角三角形,而不必选择所有 3 个顶点对,然后对它们应用毕达哥拉斯定理? 有更好的算法吗? 谢谢你的帮助。 :)


这是一个O(n^2 log n)-时间算法仅二维。我将描述更高维度中出现的问题。

令 S 为具有整数坐标的点的集合。对于 S 中的每个点 o,构造非零向量集 V(o) = {p - o | p in S - {o}} 并测试 V(o) 是否包含线性时间内的两个正交向量,如下所示。

方法一:将每个向量(x, y)标准化为(x/gcd(x, y), y/gcd(x, y)),其中|gcd(x, y)|是除以 x 和 y 的最大整数,其中如果 y 为负,则 gcd(x, y) 为负;如果 y 为正,则 gcd(x, y) 为正;|x|如果 y 为零。 (这与用最低项表示分数非常相似。)关于二维的关键事实是,对于每个非零向量,恰好存在一个与该向量正交的规范向量,特别是 (-y, x) 的规范化。将 V(o) 中每个向量的规范化插入到集合数据结构中,然后对于 V(o) 中的每个向量,在该数据结构中查找其规范正交配对。我假设 gcd 和/或 set 操作需要时间 O(log n)。

方法2:在向量上定义比较器,如下所示。给定向量(a, b), (c, d), write (a, b) < (c, d)当且仅当

s1 s2 (a d - b c) < 0,

where

s1 = -1 if b < 0 or (b == 0 and a < 0)
      1 otherwise
s2 = -1 if d < 0 or (d == 0 and c < 0)
      1 otherwise.

使用此比较器对向量进行排序。 (这与比较分数非常相似a/b with c/d.) 对于 V(o) 中的每个向量 (x, y),二分搜索其正交配对 (-y, x)。

在三维空间中,沿 z 轴与单位向量正交的向量集是整个 x-y 平面,而规范化的等效方法无法将该平面中的所有向量映射到一个正交配合。

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

检测直角三角形的C程序 的相关文章

随机推荐

  • read.table 函数和 stdin

    我有一个制表符分隔的文本文件 我正在尝试使用以下命令将其加载到 R 中 read table功能 脚本的前几行看起来像这样 usr bin env Rscript args lt commandArgs trailingOnly TRUE
  • 在同一域下混合 PHP 和 ASP.NET

    PHP 如何与 ASP NET 混合 假设我在根域下有一个 asp net 应用程序 然后我创建一个文件夹来放置 PHP PHP 可以在 ASP NET 下正常运行吗 我是否有必要将PHP目录转换为IIS7下的应用程序 PHP 已安装 我的
  • 如果 Swing 模型的 getter 不是线程安全的,您如何处理它们?

    众所周知 更新 Swing GUI 必须专门在 EDT 中完成 广告上说的比较少readingGUI 中的操作也必须 应该在 EDT 中完成 例如 我们以ButtonModel 的 isSelected http java sun com
  • 如何为 VR 准备我的游戏? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设我们有一些 C OpenGL 游戏 它使用我们自己的渲染引擎 也不是 Unity UE 等 让我们简化我们的问题 例如 我们需要在
  • ASP.NET 页面上的倒计时器

    您能给我推荐一种在 ASP NET 页面上放置倒计时器的方法吗 现在我使用这段代码 默认 aspx
  • URL转义MFC字符串

    如何对 MFC CString 进行 URL 转义 InternetCanonicalizeUrl http msdn microsoft com en us library aa384342 28VS 85 29 aspx
  • 即时 (JIT) 编译器有什么作用?

    与非 JIT 编译器相比 JIT 编译器具体做了什么 有人可以给出一个简洁易懂的描述吗 JIT 编译器运行after程序已启动 并将代码 通常是字节码或某种 VM 指令 即时 或称为即时 编译为通常更快的形式 通常是主机 CPU 的本机指令
  • 从 Cocoa 中的文件中仅读取“N”个字节

    如何从指定文件中只读取 N 个字节 如果您希望以类似于通过 NSData 加载文件的方式随机访问文件内容 但不实际将所有内容读取到内存中 则可以使用内存映射 这样做意味着磁盘上的文件被视为虚拟内存的一部分 并且将像常规虚拟内存一样进行页面调
  • C# 获取嵌入资源的完整路径? [复制]

    这个问题在这里已经有答案了 我正在使用一个 NET 组件 该组件使用一种需要具有完整路径名的字符串的方法来读取特定的二进制文件 如下所示 Read c somefile ext 我已将 somefile ext 作为嵌入式资源放入我的项目中
  • 动态应用内设置

    我有一个应用程序 位置很重要 目前 我在设置包中有一个多值设置 其中定义了 5 个位置 这种方法的问题在于设置包是静态的 也就是说 据我所知 我无法从服务器上的 JSON 列表更新它 我想从服务器上的动态列表更新位置列表 我看过 InApp
  • 共享 SwiftUI 视图的屏幕截图导致崩溃

    我正在抓取 SwiftUI 视图中子视图的屏幕截图 立即传递到共享表以共享图像 该视图是来自呈现为一堆卡片的文本数组的一组问题 我正在尝试获取问题的屏幕截图 并将其与应用程序的链接一起共享 使用愤怒的小鸟的链接进行测试 我基本上可以使用 A
  • 读取实例导致解析错误

    我想实现一个 read 实例 使我能够读取字符串 例如 8 3 并构造一个包含这些值的列表 data Value a Nul Val a showsValue Show a gt Value a gt ShowS showsValue Va
  • 在 Azure 数据工厂中引用 JSON 有效负载值作为 If 条件

    我有一个像这样的 Json 文件作为从 API 调用返回的有效负载 这是数据工厂中的 http 数据集类型 count 2 name DatasetABC columnNames Column 1 Column 2 rows 1234 56
  • AWS CLI 上传失败:未知编码:idna

    我尝试使用 AWS CLI 将一些文件推送到 s3 但遇到错误 upload failed An HTTP Client raised and unhandled exception unknown encoding idna 我相信这是一
  • Python 包及其对应的 PyPi 项目可以有不同的名称吗?

    例如 我想知道怎么可能scikit learn是 PyPi 包的名称 而实际的 Python 模块的名称是sklearn 我问的原因是我有一个本地Python包packageA我无法上传到 PyPi 因为该名称恰好已被占用 因此我想知道我是
  • 如何在Delphi中实现一套标准的超链接检测规则

    我目前在程序中自动检测文本内的超链接 我把它做得非常简单 只需要寻找http or www 然而 一位用户建议我将其扩展到其他形式 例如 https or com 然后我意识到它可能不止于此 因为还有 ftp mailto 和 file 所
  • 每个应用程序的长路径行为是否可以通过清单启用?

    尽管 MSDN 文档是什么say https msdn microsoft com en us library windows desktop aa365247 aspx maxpath 您还可以通过以下方式启用每个应用程序的新长路径行为
  • R:如何检查可用的核心数/CPU 使用率

    R 是单线程的 使用 R 如何检查 Windows 和 Linux 中运行 R 的核心 线程数 或者正在运行多少卢比 使用R 如何检查Windows和Linux中运行R的每个核心的使用情况 或者每个 R 使用的 CPU 百分比 例如 如果我
  • IIS 7.5 在哪里记录错误?

    IIS 7 5 在哪里记录错误 事件查看器 日志档案 我收到一个非常不具体的内部 500 错误 我想了解更多 我正在运行 PHP 我做了什么最后一条评论 http forums iis net t 1169733 aspx在这个帖子上说 但
  • 检测直角三角形的C程序

    如果给我坐标系中的 100 个点 我必须找出这些顶点中是否存在直角三角形 有没有一种方法可以检测这些顶点中的直角三角形 而不必选择所有 3 个顶点对 然后对它们应用毕达哥拉斯定理 有更好的算法吗 谢谢你的帮助 这是一个O n 2 log n