在多边形内部随机放置一个多边形

2024-01-08

我有两个多边形定义为一系列 2D 浮点值。不保证它们是凹的或凸的。他们不会超越自己。他们不能旋转。如果可能的话,我想将一个随机放置在另一个内部。主要问题是效率。我必须在几秒钟内执行大约 200 次左右。

我已经研究这个问题几天了,但没有取得明显进展。任何线索将不胜感激。


Disclaimer: If you are trying to pack multiple polygons inside a bigger polygon then I think, this problem is NP hard https://www.researchgate.net/publication/2632474_Translational_Polygon_Containment_and_Minimal_Enclosure_using_Geometric_Algorithms_and_Mathematical_Programming so it is unlikely that an efficient and exact algorithm can be developed to solve this problem. The polygon can continuously translate and rotate in a plane, which means the placements may be infinite and this makes the solution space of the problem also infinite. If you are just trying to find if the smaller polygon can fit inside the bigger one, I am short of an efficient answer, but as you have asked - "Any leads would be appreciated" - here is one.


设较大的多边形为 B,较小的多边形(要插入的多边形)为 S。B 共有 b 个点,S 共有 s 个点。


下图显示了边界框和最小边界矩形。我们用它来获得快速失败过滤器(非常简单的想法......在下一段中定义)。下面显示的框 (a) 计算速度更快,而框 (b) 的过滤更准确。画出那个可以为您的案例带来更好投资回报的方框。尽管在下图中,它们都围绕椭圆而不是多边形,但您明白了。

(Image taken from: http://portal.ku.edu.tr/~cbasdogan/Tutorials/imageU21.JPG http://portal.ku.edu.tr/~cbasdogan/Tutorials/imageU21.JPG)

Crux:如果 B 的任意直线与 S 的任意直线相交,或者 S 的所有直线都在 B 之外,则 B 不能将 S 纳入其中。

快速失败过滤器:获取 B 和 S 的外接矩形。如果您无法将 S 的外接矩形放置在 B 的外接矩形内,则您无法将多边形 S 放置在多边形 B 内。这样,如果没有机会,您会失败得更快。 B 包围 S。下图说明了这三种情况。

(Image taken from: http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/as4/figures/boundcull.gif http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/as4/figures/boundcull.gif)


预处理:确定形成 B 的直线方程。将它们存储在HashMap<<Point, Point>, Line>稍后将完成的步骤。您可以通过斜率唯一定义线m并拦截c线的终点将是关键(<Point, Point>)的HashMap。


算法:

对于每个通过上述过滤器的 S:

  1. 读取 S 的点并确定形成 S 的线
  2. For every line of S, see if it intersects with any line of B (they are stored in the HashMap already)
  3. 如果没有交点,S就在B的内部,你所要做的就是画线,不用担心交点。

在最坏的情况下,该算法的复杂度将为O(bs)用于绘制每个多边形。


This step is written brute-force to keep the algo easy to understand. Otherwise a critical optimization that will give result faster is possible here. You can filter lines of B. You need not consider a line of B for intersection with S if the endpoints of the line of B are to the left of the leftmost point of S, or to the right of the rightmost point of S or above S or below S. This can save a lot of calculations.

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

在多边形内部随机放置一个多边形 的相关文章

  • 快速搜索压缩文本文件

    我需要能够在大量压缩文件 txt 中搜索文本 压缩可能会改变为其他东西 甚至成为专有的 我想避免解压所有文件并压缩 编码 搜索字符串并在压缩文件中搜索 这应该可以通过对所有文件使用相同的码本使用霍夫曼压缩来实现 我不想重新发明轮子 所以 任
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • URL路径相似度/字符串相似度算法

    我的问题是我需要比较 URL 路径并推断它们是否相似 下面我提供了要处理的示例数据 GROUP 1 robots txt GROUP 2 bot html GROUP 3 phpMyAdmin 2 5 6 rc1 scripts setup
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 找到一条穿过任意节点序列的最短路径?

    In 这个先前的问题 https stackoverflow com questions 7314333 find shortest path from vertex u to v passing through a vertex wOP询
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数
  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • 每个术语出现的次数

    我得到了一个数组a n 2 where n can be 10 5最大时有n个科目和n个学生 全部编号为 1 2 n a i 0 and a i 1 1 lt i lt n 表示在第 i 个科目中 所有来自a i 0 to a i 1 通过
  • 如何对对象进行排序? (画家算法)

    所以我有 4 个矩形形状 我正在尝试应用排序算法 画家算法 https en wikipedia org wiki Painter 27s algorithm 来知道我需要先绘制哪些形状 在 3d 中 然后绘制哪个形状 Note 相机位于右
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex

随机推荐

  • Rails 4.0.1 中的新记录“没有将符号显式转换为字符串”(仅限)

    在我升级 Rails 4 后 尝试为我的任何 ActiveRecord 类创建新记录会给出 No explicit conversion of Symbol into String 例如 这是我的 links links params 方法
  • 在 FLASK 中运行 pypupeteer 会出现 ValueError: signal only Works in main thread

    我正在尝试将 pyppeteer 集成到 Flask 应用程序中 我有一个运行 pyppeteer 并截取页面屏幕截图的 python 脚本 如果我单独运行该脚本 这是工作文件 The PROBLEM当我在 FLASK 应用程序中运行它时
  • c++ - 不命名类型

    我有一个问题 当我尝试构建以下代码时 我得到 keywords does not name a type whitespace does not name a type 第 18 19 行和第 22 24 行 有人可以帮忙吗 这是代码 cp
  • 我如何解释这个输入?

    我目前使用 ANTLR 在 Java 中实现了一种可用的 简单的语言 我想做的是将其嵌入纯文本中 与 PHP 类似 例如 Lorem ipsum dolor sit amet Phasellus volutpat dignissim sap
  • Woocommerce/Wordpress - 将用户登录重定向到主页

    我已经搜索了这个问题的答案 使用了插件 但仍然没有任何效果 我希望我的网站的用户在登录 注册后被重定向到主页 目前 用户登录并被重定向到我的帐户页面 Woocommerce 提供了此代码 但它对我不起作用 goes in theme fun
  • 如何减少/消除 Angular 应用程序中的内存泄漏

    我正在优化我的大Angular App 当我发现一个Google DevTools非常好发现问题 由于我刚刚开始学习DevTools 我对内存泄漏很困惑 当我在应用程序中的不同页面之间来回移动时 配置文件堆快照大小一次又一次地增加 因此我认
  • 如何在 Java 中为 Swing 组件设置字体粗细

    我想设置不同字体粗细我的 JFrame 对话框上的组件 我该怎么做呢 在下面的Java语句中 setFont new Font Dialog Font BOLD 12 当我使用 Font BOLD 时 它太粗体 当我使用 Font Plai
  • Spark 设置为从最早的偏移量读取 - 在尝试使用 Kafka 上不再可用的偏移量时抛出错误

    我目前正在 Dataproc 上运行 Spark 作业 在尝试重新加入组并从 kafka 主题读取数据时遇到错误 我做了一些挖掘 但不确定问题是什么 我有auto offset reset set to earliest所以它应该从最早可用
  • 将 JSON 对象的一部分存储在 pandas df 中[重复]

    这个问题在这里已经有答案了 我正在尝试将以下内容存储到 pandas 数据框中 page 1 results poster path null adult false overview Go behind the scenes during
  • 使用 koa.js 显示静态 html 文件

    我想要做的是在调用索引路由 即 localhost 3000 时提供 index html 文件 我使用 koa router 进行路由 所以我的路线如下所示 app all function next Send the file here
  • 我在 Matter.js 中自己的模型

    我正在使用 Matter js 编写一个简单的游戏 我无法弄清楚如何最好地将我的模型挂接到 Matter js 中 我的游戏以细菌为特色 我想上一堂课Bacterium这样我就可以管理这些人了 在我当前的实现中 此类创建并存储自己的Matt
  • char 160 在我的源代码中意味着什么?

    我正在使用以下格式字符串 将数字格式化为字符串 在某些时候我需要将这些数字字符串 1 234 567 转回类似 1234567 的内容 我正在尝试删除空字符但发现 value value Replace 由于某种原因 该字符串仍然是 1 2
  • 通过智能感知支持从文件动态生成枚举

    我听说了很多关于 Roslyn 的事情 我只是想是否可以从 xml 文件动态生成代码 这样对于开发人员来说它是透明的 他可以使用 IntelliSense 枚举代码 就像代码是在项目中编写的一样 我正在编写一个框架 其中通过配置文件完成了很
  • SPARK 整数溢出检查

    我有以下程序 procedure Main with SPARK Mode is F array 0 10 of Integer 0 1 others gt 0 begin for I in 2 F Last loop F I F I 1
  • 单个应用程序的 REST 和 SOAP Web 服务

    我们使用 Spring 构建了一个应用程序 并使用 Tomcat 部署了它 我们有一个可用的 REST 接口 但是我们的一个客户端只有一个 SOAP 客户端 我的理解是 SOAP Web 服务和 REST Web 服务不能在同一端口或应用程
  • 使用 JavaScript 手动单步执行 CSS 动画

    如果我有一个像这样的 CSS 关键帧动画 keyframes flash red 50 background f00 goflash anm flash animation name flash red animation duration
  • 即使删除了大量较大的文件,GIT Repo 仍然很大

    我有一个长期存在的 git 存储库 最终来自另一个开发人员的一大堆不相关的文件 占用了大量的存储空间 它使用了像 5gb 这样愚蠢的东西 因为他包含了资源文件 有 5000 个 PSD 文件在回购协议中 我已经从存储库中删除了所有这些文件并
  • MySQL EXPLAIN EXTENDED 过滤列(显然不是百分比)

    我一直在寻找这个 他们都说明了某种百分比 解释一下 EXPLAIN EXTENDED SELECT FROM PageAccess ORDER BY AccessId DESC LIMIT 20 SELECT COUNT FROM Page
  • C++ - 如何隐藏其他应用程序的窗口

    我正在尝试创建一个软件 Qt C 其中我需要一种根据窗口标题隐藏其他应用程序窗口的功能 隐藏意味着不可见而不是最小化 任何人都可以说出如何实现这一目标吗 我目前正在Windows平台上工作 注意 如果您通过 Qt 提供解决方案 将会更加舒适
  • 在多边形内部随机放置一个多边形

    我有两个多边形定义为一系列 2D 浮点值 不保证它们是凹的或凸的 他们不会超越自己 他们不能旋转 如果可能的话 我想将一个随机放置在另一个内部 主要问题是效率 我必须在几秒钟内执行大约 200 次左右 我已经研究这个问题几天了 但没有取得明