求任意顶点到图边界的最小距离

2024-07-03

所以我有近似曲面的三角形网格。

它就像具有以下属性的图表:

  • 图边界上的顶点是可以轻易识别的。 (相邻顶点的数量 > 包含三角形的数量)
  • 您可以轻松计算任意两个顶点之间的距离。 (欧几里德距离)
  • 对于任意顶点v,任何不是邻居的顶点v必须有更远的距离v至少比其中之一v的邻居。换句话说,非相邻顶点不能出现在v的邻里环。

对于每个顶点v,我想计算从 v 到任意边界顶点的最小距离。

我可以通过暴力来做到这一点,建立所有边界顶点的列表,比较v与每个的距离,并保持最小。但这是低效的。

我相信对于每个顶点来说最有效的方法v是要有一个优先级队列,其中顶部元素最接近v。队列初始化为v的邻居。当队列顶部不是边界顶点时,弹出顶部并推送弹出顶点的所有邻居。

比如说顶点v有 6 个邻居,我计算了 6 个邻居中每一个的最小边界距离,并记录了为 6 个邻居提供最小值的确切边界顶点。我知道其中之一也必须给出v的最小边界值。我无法真正证明这一点,但我认为这是直观的。如果v被它的邻居包围,即距离它最近的边界顶点v也必须是距其邻居之一最近的边界顶点。

我想知道是否有一种方法可以利用这些知识来有效地计算图中每个点的最小值。比从每个顶点进行广度优先搜索更有效。


如果您进行广度优先搜索直到找到边界顶点,这并不能保证这是最近的边界顶点。要看到这一点,请注意,对于二维中的任何三角平面图,您可以向每个顶点添加一个非常小的不同 z 坐标,并定义一个 3-d 表面,其自然最简单的良好近似三角形网格(给出完美的近似)只是与原始平面图对应的网格。因此,给出一个三角平面图的示例就足够了,其中存在顶点 v,其在连接 v 到边界顶点的路径上的最小#edges 方面最接近的边界顶点不是就欧几里德距离而言最接近的边界顶点。这是此类平面图的示例。

首先画一个直角三角形,顶点为(0,0)、(1,0)、(0,1)。然后沿边从 (1,0) 到 (0,1) 选择大量顶点,使顶点将边分成相等大小的线段。将所有这些顶点连接到 (0,0)。然后,对于您添加的所有顶点,为每对相邻顶点绘制一个等边三角形,将这两个顶点用作等边三角形顶点中的两个。用直线连接等边三角形的所有“顶部”。现在您应该有一个看起来像纸牌屋第一层的区域。同样,将纸牌屋的第二层添加到第一层之上。这就是图表,它满足您的属性。现在请注意,对于沿着从 (1,0) 到 (0,1) 的边添加的所有顶点,它们将 (0,0) 作为邻居,这是边界顶点。然而,就欧几里德距离而言,最近的边界顶点将是沿着 2 层纸牌屋周长的边界顶点之一,它几乎总是相距 2 个边。从这些内部顶点之一进行广度优先搜索将返回 (0,0) 作为最近的边界顶点,这是不正确的。我认为这个例子只是让事情变得多么复杂的一瞥,这样你的假设仍然可以得到满足。最快的算法确实可能只是枚举所有边界顶点,然后针对每个顶点测试所有边界顶点以找到最接近的顶点。如果你有一个漂亮的“胖”网格,其中大多数顶点不是边界顶点,那么至少边界顶点的数量将比顶点总数小得多,因此复杂性至少比最坏情况降低了一些如果有 N 个顶点,则为 O(N^2)。

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

求任意顶点到图边界的最小距离 的相关文章

  • 如何计算两个邮政编码之间的距离?

    我有一个美国邮政编码列表 我必须计算所有邮政编码点之间的距离 它是一个 6k 邮政编码长列表 每个实体都有邮政编码 城市 州 纬度 经度 面积和人口 所以 我必须计算所有点之间的距离 即 6000C2 组合 这是我的数据示例 我已经在 SA
  • 简单的 DAWG 创建算法?

    我需要创建一个 DAWG http en wikipedia org wiki Directed acirclic word graph http en wikipedia org wiki Directed acyclic word gr
  • 求 a 范围内的 pow(a^b)modN

    对于给定的b and N以及一系列a say 0 n 我需要找到ans 0 n 1 where ans i 没有a s为此pow a b modN i 我在这里搜索的是可能的重复pow a b modN对于一系列a 以减少计算时间 例子 i
  • 在 C/C++ 中绘制填充椭圆的简单算法

    在SO上 找到了以下绘制实心圆的简单算法 for int y radius y lt radius y for int x radius x lt radius x if x x y y lt radius radius setpixel
  • 为什么记忆不是语言功能?

    我想知道 为什么我所知道的任何语言都没有将记忆化作为语言功能提供 Edit 澄清一下 我的意思是该语言提供了一个关键字来将给定函数指定为可记忆的 而不是每个函数都会 默认 自动记忆 除非另有说明 例如 Fortran 提供关键字 PURE
  • 我不明白这个霍夫曼算法的实现

    template
  • 合并排序数组,最佳时间复杂度是多少?

    我有 m 个数组 每个数组的长度为 n 每个数组都已排序 我想创建一个长度为 m n 的单个数组 其中包含先前数组的所有值 包括重复值 并已排序 我必须合并这些数组 我认为最佳时间复杂度是 m n log m 这是算法的草图 我创建了一个长
  • 呈螺旋状循环

    一位朋友需要一种算法 可以让他循环遍历 NxM 矩阵 N 和 M 是奇数 的元素 我想出了一个解决方案 但我想看看我的 SO ers 同胞是否能想出更好的解决方案 我将发布我的解决方案作为该问题的答案 示例输出 对于 3x3 矩阵 输出应为
  • 计算整数范围的重叠

    我对这个算法已经被难住很久了 假设有四个整数范围 每个范围都有一个开始值和一个结束值 Range A 0 5 Range B 4 12 Range C 2 10 Range D 8 14 从这些值中 我想得到一个新的集合 它计算特定整数范围
  • 混合声音的算法

    我有两个原始声音流需要添加在一起 出于此问题的目的 我们可以假设它们具有相同的比特率和位深度 例如 16 位样本 44 1khz 样本率 显然 如果我将它们加在一起 我的 16 位空间就会溢出和下溢 如果我将它们加在一起并除以二 那么每个人
  • 自动 GOTO 删除算法

    我听说理论上已经证明可以仅使用结构化编程结构 条件 循环和循环中断以及子例程调用 以图灵完备的语言表达任何控制流 而无需任何任意操作GOTO声明 有没有什么方法可以使用该理论来自动重构包含以下内容的代码 GOTOs 进入没有的代码 假设我有
  • 除了暴力搜索之外,如何找到凸包中最大的三角形

    给定一个凸多边形 如何找到定义面积最大的三角形的 3 个点 Related 该三角形的外接圆是否也定义了多边形的最小外接圆 是的 你可以比蛮力做得更好 By brute force I assume you mean checking al
  • 所有子集高效实施

    我需要获取 0 n 1 的所有子集 其中不包含 E 中的任何集合 天真的实现 from itertools import combinations n 4 E 0 1 c for k in range 1 n 1 for c in comb
  • Python:列表中元素之间的最大差异

    如果当前元素右侧的元素更大 我需要找到未排序列表中元素之间的最大差异 例如 myList 2 3 8 0 7 函数应计算如下 present element 2 is 3 gt 2 Yes Then 3 2 1 is 8 gt 2 Yes
  • 是否可以创建一个生成亲笔签名的算法?

    An autogram http en wikipedia org wiki Autogram是一个描述其包含的字符的句子 通常枚举字母表中的每个字母 但也可能枚举它包含的标点符号 这是 wiki 页面中给出的示例 这句话使用了两个a 两个
  • Python:带约束的多元非线性求解器

    给定一个函数f x 需要一个输入向量x并返回相同长度的向量 如何找到函数设置约束的根x 例如 每个组件的范围x 令我惊讶的是 我找不到很多关于此的有用信息 在 scipy 列表中优化和求根算法 https docs scipy org do
  • 将营业时间添加到 Java DateTime

    对于问题跟踪系统 我需要计算请求的响应时间 响应时间计时器只能在工作时间内运行 我应该使用什么算法 库来完成此任务 当然 我知道 Joda Time 或 ObjectLab Kit 但找不到任何对我的任务有帮助的东西 我错过了什么吗 Exa
  • 从数组中获取特定长度的所有可能的字符串组合的算法

    从给定数组中获取具有最小和最大长度值的所有可能的字符串组合的最佳算法是什么 注意 这会增加复杂性 因为与这些链接到的问题不同 该值是可变的 例如 letters array a b c 1 2 3 min length 1 max leng
  • 在线性时间内将整数列表拆分为总和相等的子列表

    我找到了一种算法 可以通过以下方式执行此操作 给定列表 l 计算其总和 s 计算下表 s acc s 0 s x1 x1 s x1 x2 x1 x2 名词 s x1 x n 1 x1 x2 x n 1 而在每一步中 您都会检查该对的左侧元素
  • QuickSort Dijkstra 3 路分区:为什么需要额外的交换?

    给定这里的算法 看看 i 位于 X 的场景 会发生以下情况 设想 我 gt X X gt P 1 swap X Z gt the value at i is now Z which is still gt P 2 swap Z Y gt t

随机推荐

  • (已关闭) Postman 无法正常打开

    我试图打开新安装的 Postman 时出现错误 内容如下 Could not open Postman Error Migration IndexedDB schema migration failed IndexedDb was not
  • 如何列出包含特定存储库上给定提交的分支?

    所以我读过Git 如何找出哪个分支标签 https stackoverflow com q 15806448 1798187和许多其他帖子 我已经知道如何使用 git branch contains tag 但是 我仍然需要知道如何列出包含
  • 线程局部内存泄漏

    我看到有人说 当你想在类中使用ThreadLocal时 请以静态方式使用它 例如 private static ThreadLocal
  • Wildfly + Eclipse 部署扫描器

    一般来说 我对使用服务器完全陌生 我正在尝试为下周开始的课程设置一些软件 我在尝试让 Wildfly 通过 Eclipse 工作时不断遇到这个问题 我去运行服务器 每次 无论我选择什么版本 我总是收到相同的错误消息 在 更新服务器的部署扫描
  • 如何确定 Silverlight 应用程序中是否切换了大写锁定?

    在 Silverlight 应用程序的登录屏幕中 我需要确定是否切换了 Caps Lock 通过处理 KeyUp 或 KeyDown 事件 这很容易 但是即使没有按下某个键 如何确定它是打开还是关闭呢 我想要这样做的原因是 如果用户在 Si
  • Virtual StringTree:如何判断节点文本是否完整显示?

    当TVirtualStreeTree HintMode hmTooltip时 当鼠标悬停在节点文本未完全显示的节点和列上时 节点文本将成为提示文本 但我必须设置 HintMode hmHint 以便我可以在事件处理程序中根据当前鼠标光标所在
  • 如何使用 Azure Active Directory 设置 Ocelot Api Gateway

    我跟着this https github com Azure Samples active directory dotnet native aspnetcore v2 tree master 1 20Desktop 20app 20call
  • Solr:记录最齐全、易于使用、稳定的 Python API

    我想在 Python 中使用 Lucene Solr 似乎有多个 API 用于此目的 它们似乎遭受了依赖地狱和稳定性问题 并且 Solr 不再附带 python 绑定 和我无法为不熟悉 Solr 的用户找到任何文档 我更倾向于 Sunbur
  • 如何在没有 Authorize 属性的 ASP Core 2 方法中获取用户声明?

    我有一个可以匿名访问的 API 方法 我想使用资源授权来确定用户是否具有访问权限 如果对象是 公共 的 那么任何人 包括匿名用户 都可以访问它 如果该对象是 私有 的 那么它只能由登录用户查看 如果我在方法上有授权属性 则此逻辑工作正常 但
  • 自制权限混乱

    我从我的管理员帐户安装了 Homebrew 如果我跑brew doctor从该帐户我没有收到任何错误 但如果我运行brew doctor从我的非管理员用户帐户中 我收到有关多个目录的警告 usr local及其子目录 不可写 以及我的建议c
  • 使用cookie而不将它们发送回服务器

    我需要一种方法来存储浏览器全局的一些数据 如果我打开一个新窗口 其中包含我的应用程序中的 URL 例如通过书签 我需要访问在另一个窗口中创建的一些数据 但从未发送到服务器 据我所知 对于浏览器而言 唯一全局的东西 而不仅仅是窗口 如 win
  • 我可以将更新的结构导入 MySQL 表而不丢失其当前内容吗?

    我们使用 MySQL 表 随着产品的发展 我们会不时添加新字段 我正在寻找一种方法将表的结构从数据库的一个副本导出到另一个副本 而不删除我要导入的表的内容 例如 假设我有表的副本 A 和 B 并且我将字段 X Y Z 添加到表 A 有没有办
  • Eclipse RCP:利用配置目录

    我的 Eclipse RCP 应用程序需要一个配置文件 其中包含一些连接到远程数据库的信息 存储此配置文件的最佳位置在哪里 我可以使用默认配置目录 通常存储 config ini 的位置 来实现此目的吗 如果是这样 如何以编程方式将 Fil
  • Django:刷新命令没有完全清除数据库,重置失败

    我重写了很多模型 并且由于我只是运行测试服务器 因此我执行 manage py Reset myapp 来重置数据库表 一切都工作正常 但这次我尝试这样做 但出现错误 完整错误 关系 myapp tagger 的约束owner id ref
  • 使用 key/keyref 身份约束将 XML 模式编译为 Java

    假设我有以下 XML 架构
  • 在 PIL 中旋转正方形

    使用 PIL 我想通过指定正方形边长和旋转角度在图像上绘制旋转的正方形 正方形应该是白色的 背景是灰色的 例如 下图旋转了 45 度 我知道如何在 PIL 中进行旋转的唯一方法是旋转整个图像 但如果我从下图开始 然后将其旋转 45 度 我得
  • 如何创建一个引发异常或根据条件返回值的表达式?

    我正在努力构建一个表达式 如果条件为真 则抛出异常 如果条件为假 则应返回一个值 但我总是得到ArgumentException var expr Expression Condition Expression Equal Expressi
  • 有没有办法过滤/搜索 HTMLEditorKit 中的内容?

    我有一个普通的 HTMLEditorKit 对象 historyKit new HTMLEditorKit historyDoc new HTMLDocument history new JEditorPane text html JScr
  • Spring Security 3.2 令牌认证

    我知道已经有人问过这个问题 但我无法让它发挥作用 这是我想要完成的事情 我正在使用 Spring Security 3 2 来保护类似 REST 的服务 没有服务器端会话 我没有使用基本身份验证 因为这意味着我需要将用户的密码存储在客户端的
  • 求任意顶点到图边界的最小距离

    所以我有近似曲面的三角形网格 它就像具有以下属性的图表 图边界上的顶点是可以轻易识别的 相邻顶点的数量 gt 包含三角形的数量 您可以轻松计算任意两个顶点之间的距离 欧几里德距离 对于任意顶点v 任何不是邻居的顶点v必须有更远的距离v至少比