多边形分解——去除凹点形成凸多边形

2023-12-27

我想解构以下以蓝色显示的多边形,从多边形中删除导致凹面的所有点。

目前,我一直在尝试做的是:

  • 将每个点从多边形中取出
  • 测试该点以查看它是否落在由该集合的其余部分创建的多边形内
  • 如果为 true 则删除该点
  • 如果为假,请保留要点

这在大多数情况下都有效,但在前一种情况下,(2,3) 和 (2,4) 处的点不会同时被删除。在这两种情况下,其中一个点将被删除,但另一个点不会被删除,具体取决于数组传入的顺序。

我想知道的是:

  1. 有没有某种方法可以测试我正在处理的多边形是否恰好有这些情况之一(即:连续 3 个故障点?)
    or
  2. 有没有更有效的方法来创建凸多边形?

谢谢。


我想也许你正在寻找凸包 http://en.wikipedia.org/wiki/Convex_hull?

我首先想到的算法是 QuickHull。首先,取最左边和最右边的点 l 和 r。它们一定是在船体上。

构建对船体的第一个猜测,该船体有两个向外的面,一个从 l 到 r,一个从 r 到 l。所以你有一个体积为零的多边形。

将所有剩余的点分为lr前面的点和rl前面的点。

从那时起,虽然任何面前面都有任何点:

  • 找到离脸部最远的点
  • 删除这条边并用两条边替换它,一条从原始起点到最远点,一条从最远点到原始终点
  • 在旧面孔前面的所有点中,将这些点放在您添加到其前面集合中的第一个新面孔前面,将第二个面孔前面的点放入其前面集合中,并且不要保留对现在内部的任何引用

最后你将得到凸包。

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

多边形分解——去除凹点形成凸多边形 的相关文章

  • 使用 SQL 查找给定 x、y 坐标的填充矩形

    给定以下填充的 x y 坐标 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 4 0 4 1 5 0 5 1 如何编写 SQL 查询来确定所有填充的矩形 矩形由其左上角和右下角定义 期望的结果 x1 y1 x2 y2
  • 如何在 Three.js 中从三角面获取多边形?

    我在网上查了一下是否有人遇到同样的问题 我正在使用 Three js 我有一个 3DObject 其中可能包含孔 面是三角形的 假设我想从上面看到它 我的目标是获得一个代表顶面周长的多边形 这对我来说意味着不再有三角面 而只有 1 个多边形
  • 如何使用 start 和 endAngle 渲染 svg 圆

    我使用 start 和 endAngle 渲染了 svg 圆 效果很好 但是当我渲染完整的圆 startAngle为70 endAngle为70 时 输出有很大的不同 0 90 180 270除外 我为这段代码做错了什么 function
  • 如何检测重叠的圆圈并相应地填充颜色?

    我使用 3 个数组 用于 x y 和半径大小 创建了 5 个具有随机 x 和 y 坐标和半径的圆 但是 我需要圆圈根据它们是否与另一个圆圈重叠来动态改变颜色 因此 如果 5 个圆圈之一根本不重叠 则应将其涂成黑色 重叠的圆圈应为青色 如果两
  • 球体表面上测地线(最短距离路径)之间的交点

    我进行了广泛的搜索 但尚未找到该问题的合适答案 给定球体上的两条线 每条线由起点和终点定义 确定它们是否相交以及相交的位置 我找到了这个网站 http mathforum org library drmath view 62205 html
  • 用于移动物体的空间数据结构?

    我想知道处理大量移动对象 球体 三角形 盒子 点等 的最佳数据结构是什么 我试图回答两个问题 最近邻和碰撞检测 我确实意识到 传统上 像 R 树这样的数据结构用于最近邻查询 Oct Kd BSP 用于处理静态对象或很少移动对象的碰撞检测问题
  • 不均匀圆盘的最佳覆盖

    What kind of algorithm can I use to search for an optimal minimum area covering of a limited region of the XY plane with
  • 在iOS开发中,使用Core Graphics和/或Quartz 2D,如何绘制一个充满渐变的圆,使其看起来像一个球体?

    到目前为止 我已经研究过使用 CGContextDrawLinearGradient 和 CGContextDrawRadialGradient 但是 对于前者 我无法弄清楚如何使渐变看起来像球体 对于后者 我无法弄清楚如何使渐变成球体形状
  • 笛卡尔坐标到极坐标

    看一下这里的例子 http www brianhare com physicals so html http www brianhare com physics so html 看一下 console log 我在其中使用了这两个主要函数
  • 以有效的方式找到最近点

    我在 2d 平面上有一个点 例如 x0 y0 和一组 n 点 x1 y1 xn yn 我想在 a 中找到距离 x0 y0 最近的点比尝试所有要点要好得多 有什么解决办法吗 我还应该说我的观点是这样排序的 bool less point a
  • 使用 boost 几何检查两条线是否有交点

    是否可以使用 boost geometry 检查两条线段 每条线段由二维中的两个点给出 是否彼此相交 如果可能的话 boost geometry 是否还允许检查特殊情况 例如另一条线上只有一个点 数字上 或者两条线相等 如果你具体谈论Boo
  • 如何在iphone中画同心圆?

    我想画一个戒指 环应填充在外圆中 我参考了一个文档http developer apple com library mac documentation GraphicsImaging Conceptual drawingwithquartz
  • 如何最小化两个子多边形的最大纵横比?

    我想使用直线将凸多边形切成给定面积比的两部分 以使两个子多边形的较大纵横比最小化 目前我的方法包括选择一个随机起点 计算将多边形分割成目标区域的适当终点 然后计算两个纵横比中较大的一个 然后重复这个很多次 直到我足够接近最小值 多边形 A
  • 处理中渲染极地带面体时出现问题

    我最近一直在研究 Zohedrons 和Rob Bell http zomadic com 做出了美丽的 我玩了免费的极地带面体 Sketchup 插件 http zomebuilder com 并考虑使用几何图形加工 http proce
  • Three.js :face4 生成三角形而不是正方形

    我正在尝试使用 tree js 自定义几何图形生成一个正方形 但是这段代码 var cubeGeo new THREE Geometry cubeGeo vertices push new THREE Vector3 25 25 25 cu
  • 如何生成随机凸多边形?

    我正在尝试设计一种生成随机二维凸多边形的方法 它必须具有以下属性 坐标应该是整数 多边形应位于角为 0 0 和 C C 的正方形内 其中 C 已给出 多边形的顶点数量应接近给定数量 N 例如 生成具有 10 个顶点并位于正方形 0 100
  • 使到 n 个点的集合的欧氏距离之和最小的点

    我有一组点W x1 y1 x2 y2 xn yn 在 2D 平面上 你能找到一种算法 将这些点作为输入并返回一个点 x y 在 2D 平面上 距以下点的距离之和最小W 换句话说 如果 di Euclidean distance x y xi
  • Python 中使用 geoJSON 绘制多边形中的点

    我有一个包含大量多边形 特别是人口普查区 的 geoJSON 数据库 并且有很多长的纬度点 我希望存在一个有效的 Python 代码来识别给定坐标位于哪个人口普查区 但是到目前为止我的谷歌搜索还没有透露任何信息 Thanks 我发现了一个有
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 用 tkinter 画圆更简单的方法?

    在a上画一个圆tkinter Canvas通常由create oval方法 然而 提供边界框通常是绘制圆的一种令人困惑的方式 想出一个捷径并不是特别困难 但我找不到其他人在做类似的事情 所以我将其发布 希望其他人发现它有用 这是一个称为猴子

随机推荐

  • 在图像悬停时显示播放图标

    目标 当我将鼠标悬停在 item 图像上时 我希望 play 图像出现在 item 图像 div 的中心 我做了以下事情 play img 与 itemImage img 重叠 HTML div class itemsContainer i
  • Java 的 BouncyCastle 并不总是验证 OpenSSL ECDSA 签名

    我使用 OpenSSL 在 C 中 对文本进行签名 但是我的 Java 程序并不总是验证签名消息 只有大约五分之一得到验证 有趣的是https kjur github io jsrsasign sample sample ecdsa htm
  • 为什么 .title(for: .normal) 对于 UIKit 中的 Plain 样式返回 nil

    我正在关注 Apple 的 Apple Pie 项目Swift 基础知识开发 https books apple com us book develop in swift fundamentals id1556365994书 第 333 3
  • HTML 登录表单:提供用户名、自动填充密码

    我需要一个登录表单 只需提供我的用户名 因为它会记住我的密码并自动填写密码字段 例如 像 gmail auth 一样 我怎样才能做到这一点 thanks Luca 提醒人们避免用头撞墙的注意事项 Chrome 不会在不受信任的网站上保存和建
  • python:带有字符串输入的调度方法

    我需要编写一个接受 3 个参数的方法 a string带有函数名称 一个有序的list该函数的参数 这包括具有默认值的参数和 varargs 但不包括 kwargs a dict表示任何附加关键字参数 或None如果没有 我需要使用此输入来
  • android-opencv 使用 matToBitmap/bitmapToMat 将 mat 转换为灰度

    我在 eclipse 中使用更新的 willowgarage opencv 库 我想将 mat 变量转换为灰度 我已经尝试了在网上找到的所有内容 但它们对我不起作用 这是我的代码 package com deneme deneme impo
  • 获取 Java 时区的夏令时转换日期

    我想知道在 Java 中最简单的方法来获取未来夏令时将发生变化的日期列表 一种相当不优雅的方法是简单地迭代多年的日子 并根据 TimeZone inDaylightTime 测试它们 这会起作用 而且我不担心效率 因为这只需要在每次我的应用
  • 我应该在 C# 项目中使用 WPF 还是 Windows 窗体应用程序?

    我正在开发一个基于客户端 服务器的应用程序 其中客户端应用程序将访问服务器数据库来存储计费信息 它还将具有报告生成功能 Windows 窗体在文档打印方面表现出色 但我在 WPF 中没有看到这样的功能或控件 如果我错了 请纠正我 我想要数据
  • &pointer 如何具有指向指针的类型?

    struct node int a int main struct node y 23 struct node x y return 0 这是我遇到的一些代码 我弄乱了代码并发现 x 有类型指针到指针 我很困惑这是怎么回事 所以我把它画出来
  • 如何从grails中的控制器调用服务

    我有一个服务类 我试图在我的控制器中调用该服务的方法 如下所示 class LogListController def ListLogDetails println We are inside List log Details gt par
  • AWS EventBridge - 读取事件档案

    有谁知道是否有一个 API 可以读取使用 EventBridge 归档功能归档的事件 我们的目标是进行事件重播 但开箱即用的事件重播功能对我们不起作用 因为我们需要保留事件的时间顺序 作为一种解决方法 我想知道是否有一个选项可以通过拖网事件
  • RxJava 在多个订阅者之间共享 Observable 的排放

    我有以下问题 我有一个可观察量正在做一些工作 但其他可观察量需要该可观察量的输出才能工作 我曾尝试多次订阅同一个可观察量 但在日志中我看到原始可观察量已启动多次 这就是我的观察结果 即创建对象 Observable create Obser
  • 仅当我激活工作表时,VBA 复制和粘贴才有效

    我正在工作表之间复制一些范围 但我不知道为什么只有在复制或粘贴工作表之前激活工作表时它才有效 这有效 s Activate s Range Cells 2 8 Cells lrow 8 Copy d Activate d Range Cel
  • Javascript 解析/评估顺序?

    这可能是一个棘手的问题 但我不明白为什么会这样 这会发出警报 function foo 但我希望在定义函数 foo 之前评估警报 有人可以解释我对解析 评估顺序的不理解 或者指出我不理解的资源吗 JavaScript 与 PHP 一样 跟踪
  • null 或empty 的更简单写法?

    我确信我在这里错过了一些东西 对于某个项目 我需要检查字符串是否为空或为空 有没有更简单的方法来写这个 if myString myString null 是的 有String IsNullOrEmpty https msdn micros
  • 字符串连接可以用于包含 SpEL 的应用程序 yml 值吗?

    我正在尝试定义一个 Spring 数据源 url 如下所示 spring datasource url jdbc vcap services compose for mysql credentials uri useSSL true req
  • 在 Rust 中逐行读取大文件[重复]

    这个问题在这里已经有答案了 我的 Rust 程序旨在逐行读取非常大 最多几 GB 的简单文本文件 问题是 这个文件太大 无法一次读取 或者将所有行传输到一个Vec
  • IntelliJ 自动完成替换函数名称

    我已经从 Eclipse 切换到 IntelliJ 但有一些东西我还没有找到 也没有在 google 上找到 How to get the autocomplete to replace the name of the function I
  • 无法销毁 Firebase 连接,导致热 Lambda 由于“Firebase 应用程序名称‘[DEFAULT]’已存在”而失败

    几个小时以来我一直在尝试我能想到的每一种方法 基本上 我正在运行一个 AWS Lambda 函数 它以客户端和服务器角色对我的 Firebase 应用程序执行一些工作 在 Lambda 上 我需要能够逆转firebase initializ
  • 多边形分解——去除凹点形成凸多边形

    我想解构以下以蓝色显示的多边形 从多边形中删除导致凹面的所有点 目前 我一直在尝试做的是 将每个点从多边形中取出 测试该点以查看它是否落在由该集合的其余部分创建的多边形内 如果为 true 则删除该点 如果为假 请保留要点 这在大多数情况下