正交船体算法

2023-12-08

我正在尝试找到一种方法来确定直线多边形来自一组整数点(由下图中的红点表示)。下图显示了我想要实现的目标:

1.

enter image description here

我只需要定义直线多边形边界的最小点集。我能找到的大多数船体算法都不满足这个问题的正交性质,例如礼物包装算法,产生以下结果(即not我想要的是)...

2.

enter image description here

如何获得定义图像中所示边界的点集1.?

Updated:

图1.不再称为凸..


维基百科的定义,创建快速算法相当容易。

  1. 从最左边的点开始构建上船体(如果有很多,则在最上面)。将此点添加到列表中。
  2. 寻找下一个点:在所有坐标都严格大于当前点的点中,选择最小的那个点x协调。将此点添加到您的列表中并从此继续。
  3. 尽可能继续在步骤 2 中添加积分。
  4. 从最右边的点(其中最上面的点)重复相同的操作,但向左。 IE。每次选择下一个更大的点y, less x,以及差异x必须是最小的。
  5. 合并从步骤 3 和步骤 4 获得的两个列表,就得到了上船体。
  6. 对下部船体执行相同的步骤 1-5,类似地。
  7. 合并步骤 5 和 6 中找到的上下船体。

为了快速找到下一个点,只需对点进行排序x协调。例如,当构建第一个右上链时,您可以按x增加。然后迭代所有点。对于每个点检查其是否y坐标大于当前值。如果是,则将该点添加到列表中并使其成为当前点。

总体复杂度为O(N log N)用于排序。

编辑:上面的描述仅显示如何跟踪船体的主要顶点。如果您想要一个完整的直线多边形(连续点之间有线段),那么每次找到下一个点时,您都​​必须向链中添加一个附加点。例如,在构建右上链时,如果找到一个点(x2, y2)从当前点(x1, y1),你必须添加(x2, y1) and (x2, y2)到当前链表(按此顺序)。

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

正交船体算法 的相关文章

  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • 如何确定算法函数的复杂度?

    您如何知道算法函数对于特定操作是否需要线性 常数 对数时间 它取决于CPU周期吗 您可以通过三种方式 至少 做到这一点 在网上查找算法 看看它是如何描述其时间复杂度的 根据输入大小 自己检查算法 查看嵌套循环和递归条件等内容 以及每个循环运
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • URL路径相似度/字符串相似度算法

    我的问题是我需要比较 URL 路径并推断它们是否相似 下面我提供了要处理的示例数据 GROUP 1 robots txt GROUP 2 bot html GROUP 3 phpMyAdmin 2 5 6 rc1 scripts setup
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 将名称字符串编码为唯一的数字

    我有一大堆名字 数以百万计 他们每个人都有一个名字 一个可选的中间名和一个姓氏 我需要将这些名称编码为唯一代表这些名称的数字 编码应该是一对一的 即一个名称只能与一个数字相关联 一个数字只能与一个名称相关联 对此进行编码的明智方法是什么 我
  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1

随机推荐

  • 如何对 Flash 对象使用 display none 和 block?

    我已经嵌入了一些 Flash 如下所示 div style display none div
  • SQL Server 锁定的 DataReader 行为

    当通过 SQL Server 查询返回大型数据集时 我们的数据层会遇到一些问题DataReader 当我们使用DataReader要填充业务对象并将它们序列化回客户端 获取可能需要几分钟 我们正在向用户显示进度 但我们发现受影响的表上正在进
  • JavaScript 是否有集合数据结构的实现?

    我正在寻找 JavaScript 中集合数据结构的合适实现 它应该能够支持纯 JavaScript 对象的元素 到目前为止我只发现闭包库的structs Set 但我不喜欢它修改我的数据 ECMAScript 6 有它 Spec http
  • 序列化和反序列化期间如何调用构造函数?

    序列化和反序列化过程中如何调用构造函数 什么时候有一个类实现可序列化 当存在父 子关系并且只有子实现可序列化时 当存在父子关系并且父子都实现了可序列化时 在反序列化期间 为继承层次结构中未实现 Serialized 的第一个类调用可访问的默
  • 如何编写迁移以使用ManyToManyField更改模型的主键

    我有一个UserProfile指的是我的模型User模型与一个OneToOneField 我也用post save信号自动创建UserProfile当用户被创建时 除了通过管理员创建用户 我使用内联 时 当我收到有关重复配置文件的错误时 这
  • 有没有办法在不调用另一个函数的情况下从成功处理程序中获取值?

    好的 现在我正在这样做 google script run withSuccessHandler updateOutput withFailureHandler errorOutput finish 进而 function updateOu
  • 50 次迭代后,常数“pi”的近似值并没有变得更好

    在 R 中我写了这个函数 ifun lt function m o c for k in 1 m o k prod 1 k prod 2 1 k 1 o sum 2 1 sum o Final result print o sum 该函数近
  • Android Room:使用 Room 插入关系实体

    我在 Room 中添加了一对多关系Relation 我提到这个帖子在 Room 中为关系编写以下代码 这篇文章讲述了如何从数据库读取值 但将实体存储到数据库中会导致userId为空意味着这两个表之间没有关系 我不确定什么是理想的方式inse
  • 管理员访问白名单IP地址

    我的网站上有一个区域 我只想允许少数人访问 我的代码现在仅适用于一个 IP 地址 但我希望能够添加更多 这是我正在使用的 ipaddress SERVER REMOTE ADDR if ipaddress 111 111 111 111 A
  • OpenGL 旋转 - 局部轴与全局轴

    因此 我尝试根据偏航 俯仰和滚动方案旋转一个对象 相对于该对象自己的局部轴而不是全局空间的轴 根据this 我需要按该顺序执行轮换 我将其解释为 glRotatef m Rotation y 0 0 1 0 0 0 glRotatef m
  • Cordova chrome.socket API。有什么例子吗?

    我正在尝试使用 org chromium socket 插件 但我找不到很多例子 这是我的代码 var connButton document getElementById connButton connButton addEventLis
  • 标准 TFlite 对象检测模型在 MLKit 中不起作用

    如果我使用预训练的 TFLite 对象检测模型在 MLKit 中 我收到以下错误 CalculatorGraph Run failed in Run Calculator Open for node BoxClassifierCalcula
  • 如何离开办公室使用另一个邮箱

    我正在尝试使用 EWS EWS 托管 API 2 0 获取给定邮箱的 离开办公室 设置 设置如下 单个 服务帐户 邮箱 可读取其他邮箱日历和外出设置 使用 EWS 托管 API 可以轻松完成日历部分 但我似乎无法弄清楚如何使用 API 获取
  • 将 jquery 数据表导出到带有附加行的 Excel 不起作用 IE

    我正在尝试使用 jquery 导出按钮选项将数据表导出到 Excel 工作表 我希望在 Excel 文件中的表数据之前添加额外的行 我在小提琴中做了一个类似的演示https jsfiddle net xevpdeo1 17 它在 Chrom
  • 以编程方式将文件夹添加到 Finder 中的“位置”

    我正在尝试弄清楚如何以编程方式将文件夹添加到 Finder 的 位置 侧边栏 我已经看到了通过 Finder 首选项修改它的方法 但我也看到一些应用程序实际上将文件夹添加到侧边栏 如果有人对我应该查找的内容有任何建议 指示 我将不胜感激 这
  • 从向量对中获取值时出错

    为什么在访问对向量的迭代器中对的值时会出现以下错误 vector lt pair
  • 使用 php 从非公共 html 文件夹下载文件

    我有许多文件存储在服务器上 但不在 public html 目录中 这个想法是 登录的用户可以下载文件 使用 SESSION 变量来检查他们是否登录 但如果其他人使用他们的计算机 他们就无法在浏览器历史记录中看到直接文件路径 即使他们这样做
  • Gluon Mobile 项目不适用于 gradle 6

    我有一个 Gluon 移动项目 其 build gradle 如下所示 buildscript repositories jcenter google mavenCentral maven url http nexus gluonhq co
  • 如何从 R 中的流式 MapReduce 作业获取文件名?

    我正在流式处理 R mapreduce 作业 并且需要获取文件名 我知道 Hadoop 在当前作业启动之前设置环境变量 并且我可以使用 Sys getenv 访问 R 中的环境变量 我发现 获取流式hadoop程序中的输入文件名 和 Sys
  • 正交船体算法

    我正在尝试找到一种方法来确定直线多边形来自一组整数点 由下图中的红点表示 下图显示了我想要实现的目标 1 我只需要定义直线多边形边界的最小点集 我能找到的大多数船体算法都不满足这个问题的正交性质 例如礼物包装算法 产生以下结果 即not我想