Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将任意数目的多边形组合在一起

将任意数目的多边形组合在一起
EN

Stack Overflow用户
提问于 2012-12-01 15:02:11
回答 3查看 428关注 0票数 4

我有任意数量的多边形(在这种情况下是六边形)是随机排列的,但它们都在接触另一个六角。

每个单独的十六进制都有6x,y点。所有的六边形都知道顶点的存在。

有人能指出一个算法的方向吗?这个算法将所有的六边形组合成一个多边形?本质上,我只是在寻找一个函数,它以一种从一条线到另一条线的方式排列出一个顶点位置数组,它形成多边形。

到目前为止,这是我的方法:

  1. 为所有的十六进制创建所有顶点的数组。
  2. 确定数组中顶点发生的次数。
  3. 如果顶点在数组3+时间内,则从数组中删除顶点。
  4. 如果顶点在数组中2次,则删除其中的一个。

不过,下一步是很棘手的。我用画布画出这些多边形,实质上是画一条从一个顶点到另一个顶点的线。因此,最终数组中顶点的顺序是非常重要的。不能武断地分类。

另外,我不是在寻找一个“凸包”算法,因为这不会正确地绘制多边形。

有这样的功能吗?我是在正确的轨道上,还是有更好的更有效的方式?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-01 15:08:22

我会这样做:

  1. 把所有的都列出来。边由两对坐标定义。
  2. 如果任何一方不止一次出现,则移除该侧的所有实例。
  3. 挑一个任意的一面,然后从那一边选择一个点。
  4. 将该点放置在数组中。
  5. 按照当前的方向,在数组中放置另一个点。
  6. 删除你刚才跟着的那一边。
  7. 然后查找另一侧的点,该点与数组中的最后一个点相同。只有一个这样的一面。如果没有,你就完蛋了。
  8. 回到第5步。

您现在应该有一个数组的点组成,按照顺序,你想要的形状。

只是要注意这不会处理洞。形状必须由一条路径来定义。

票数 5
EN

Stack Overflow用户

发布于 2012-12-01 16:27:17

如果不跟踪构成线的坐标对,就不可能确定形状的外部边界。

如果你知道构成线的坐标对,那么

  1. 创建两个列表,一个顶点(列表1),一行(列表2)
  2. 从顶点列表中删除所有重复顶点
  3. 创建一个新列表(列表3),列出所有有3行行的顶点。
  4. 使用列表3,从列表3中删除所有有两个顶点的行作为它们的两个坐标对。
  5. 现在是遍历形状的时候了,剩下的行列表应该形成您想要的形状,从任意坐标开始,然后对于所有线的每个坐标,如果(x1,y1) =当前坐标,然后添加(x2,y2)来堆栈,然后从列表断点(x2,y2) =当前坐标中移除这条线,然后添加(x1,y1)到堆栈,然后从列表中断中删除这一行。
票数 0
EN

Stack Overflow用户

发布于 2012-12-01 18:28:45

对于每一个十六进制,你有一个6个顶点的列表。如果有必要,对列表进行排序,以便按逆时针顺序排列顶点(这是数学惯例)。

现在你有了一组多边形(最初是六边形)。这个想法是组合多边形,直到只有一个(或尽可能少)。

选择多边形的一条边,并在其他多边形中寻找相同的边(即同一对顶点)。如果有两个实例,则将该边的两个多边形组合起来,例如(a,b,c,d,e,f) + (g,h,d,c,i,j) => (a,b,c,i,j,g,g,h,d,e,f)。(如果两个顶点在两个多边形中的顺序相同,或者如果存在三个或多个边缘实例,则报告一个错误并终止。)遍历所有的边缘。如果这些六边形真的形成了一个连续的群,就只剩下一个多边形了。

多边形可能有重复的边。如果一个边不止出现一次,则通过将列表分成两部分来消除它,例如(a,b,c,d,b,a,e,f,g) => (b,c,d) + (a,e,f,g)。如果边缘相邻,则移除它们:(a,b,c,b,d,e) => (a,b,d,e)。或者,如果该列表只有该边,则删除该列表:(a,b) => nothing。

一旦你消除了重复的边缘,将有一个列表的逆时针外边的多边形,也许一个或多个列表顺时针方向的内部边缘的孔。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13664642

复制
相关文章
Axios 取消重复请求
项目地址:https://github.com/Ewall1106/mall 有什么用? 当用户频繁点击在短时间内发送多个 ajax 请求,但是由于网络原因服务器数据无法及时响应返回,这时候,就会有可能造成前端页面数据不匹配的情况。 具体场景来说,在用户网速不好的情况下的比如搜索框 onchange 事件的模糊搜索、触底刷新请求列表数据、tab 栏的高频切换等等。 再者,这样也浪费服务器资源,也是性能优化的一种必要手段。 基本使用 官网地址:Axios-CancelToken 官网的基本示例如下。 c
Ewall
2020/11/12
1.5K0
如何优雅处理重复请求/并发请求?
一些用户请求在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些涉及写入操作,一旦重复了,可能会导致很严重的后果。例如交易接口如果重复请求,可能会重复下单。
java进阶架构师
2021/07/08
4.8K1
如何优雅处理重复请求/并发请求?
优雅地处理重复请求(并发请求)
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/24
9970
如何优雅地处理重复请求(并发请求)
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。 重复的场景有可能是: 黑客拦截了请求,重放 前端/客户端因为某些原因请求重复发送了,或者用户在很短的时间内重复点击了 网关重发 …. 本文讨论的是如何在服务端优雅地统一处理这种情况,如何禁止用户重复点击等客户端操作不在本文的讨论范畴。 利用唯一请求编号去重 可能会想到的是,只要请求有唯一的请求编号,那么就能借用Redis做这个去
程序猿DD
2022/04/11
5760
如何优雅地处理重复请求(并发请求)
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。
用户1263954
2022/05/23
1.1K0
如何优雅地处理重复请求(并发请求)
如何优雅地处理重复请求(并发请求)
你可能会想到的是,只要请求有唯一的请求编号,那么就能借用Redis做这个去重——只要这个唯一请求编号在redis存在,证明处理过,那么就认为是重复的
用户2781897
2020/12/15
1.4K0
LeetCode - 重复 N 次的元素
原题地址:https://leetcode-cn.com/problems/n-repeated-element-in-size-2n-array/
晓痴
2019/08/06
7650
LeetCode - 重复 N 次的元素
webapi避免http重复请求
route过滤 添加路由过滤,在过滤器中判断sessionid或者cookie session session服务端文件,存储guid或者用户账户(操作简单,增加服务器压力) session管理参考:https://www.cnblogs.com/wxdlut/p/9237577.html cookie cookie浏览器端,浏览器请求附带cookie,cookie设置超时管理连接状态) 路由过滤实现方式 golang gin.Default().Use(func() gin.HandlerFunc{
sofu456
2021/12/06
8970
封装 axios 取消重复请求
在我们web开发过程中,很多地方需要我们取消重复的请求。但是哪种场合需要我们取消呢?我们如何取消呢?带着这些问题我们阅读本文。
coder_koala
2021/01/06
1.7K0
ExcelVBA生成不重复n位的n个数字
'使用方法:call rnd_n_n(位数,个数,存放位置)如:Call rnd_n_n(10, 100, "a1")
哆哆Excel
2022/10/25
4460
ExcelVBA随机生成不重复的N个N位数文本
效果看图 【代码】 自定义函数1 '随机生成不重复指定位数文本,用法:brr=RndDigitText(位数, 个数) '.range("A1").Resize(UBound(brr), 1) = brr Function RndDigitText(di As Integer, number As Integer) Dim d As Object 'New Dictionary
哆哆Excel
2022/10/31
5080
961. 重复 N 次的元素
在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。 返回重复了 N 次的那个元素。
Michel_Rolle
2021/02/25
2.5K0
java防止接口重复请求_前端防止重复提交
对于一些新增数据的接口通常需要进行接口的防重复提交保护,如:用户账号注册、用户下单、用户发帖等等类似的应用场景。 防重复提交主要应用场景是避免用户短时间内由于误操作导致同一份数据被保存多次所带来的问题,如果被保存的数据内容存在唯一标识限制则可以选择不使用防重复提交,在业务侧保证数据的唯一性即可。 注意:防重复提交只能防止短时间内用户的误操作导致插入重复数据的问题,如果需要数据的唯一性还是需要在业务中自行处理。
全栈程序员站长
2022/09/27
2K0
AJAX请求重复发送问题
在进行 AJAX(Asynchronous JavaScript and XML)请求时,我们有时会遇到请求重复发送的问题。这可能会导致不必要的请求重复执行,增加服务器负载和网络带宽消耗,并且可能对应用程序的性能和用户体验产生不良影响。
堕落飞鸟
2023/05/18
1.2K0
Axios使用CancelToken取消重复请求
处理重复请求:没有响应完成的请求,再去请求一个相同的请求,会把之前的请求取消掉
明知山
2023/08/18
4020
Axios使用CancelToken取消重复请求
SpringBoot如何处理重复请求?
日常业务开发中,处理重复请求应该是我们需要经常注意的,那么在Spring Boot中,防止重复请求的方法可以通过以下几种方式实现:
跟着可乐学技术
2023/04/27
9470
get 和 post 重复请求详解
适用于频繁触发并且需要给予用户一些反馈的场景,如:resize、scroll、mousemove
ruochen
2021/12/16
3.5K0
使用Vagrant在几秒钟内调试内核
所有Windows内核黑客(从初学者到专业人士)都知道,设置和管理用于内核调试的虚拟机可能很耗时。Vagrant是一个免费的开源工具,可以自动创建和自动化VM。这篇文章将向您介绍Vagrant,以及如何利用其功能自动执行我们的内核调试设置。
franket
2021/01/05
2.9K0
使用原生 JavaScript 在页面加载完成后处理多个函数
网页中的 JavaScript 脚本运行是需要通过事件去触发的。一般的做法就是在网页中,直接编写几个函数,有的在代码被加载的时候就被浏览器处理,或者使用类似下面的代码来触发实现函数的相关功能。
Denis
2023/04/15
2.8K0
iOS多个网络请求完成后执行下一步
在开发中,我们很容易遇到这样的需求,需要我们同时做多个网络请求,所有网络请求都完成后才能进行下一步的操作。如下载多个图片,下载完了才能展示。 今天我们就来研究一下这个问题的解决方案。 1.首先,我们创建一个项目,然后做一般性的做法,不做任何处理去连续请求一个接口10次: 先在viewDidLoad中创建第一种情况. //1.无处理 UIButton *Btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; Btn1.frame = CGRec
清墨
2018/05/07
3K0

相似问题

重复bash命令n秒钟

22

RXJava + Retrofit.每n秒钟重复请求一次

16

重复函数执行n秒钟

44

如何每N秒钟重复运行bash脚本?

28

angular2调用http.get请求打开文件

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文