旋转卡壳——凸多边形最小周长外接矩形

凸包+旋转卡壳专题 洛谷P2742 求凸包周长 #include<bits/stdc++.h> using namespace std; const int MAX=1e4+1; const double eps=1e-8; struct point { double x,y; point(){} point(double a,double b) { ... 阅读详情

凸多边形最小周长外接矩形

这个问题和最小面积外接矩形相似。 我们的目标是找到一个最小盒子(就周长而言)外接多边形 P 。

有趣的是通常情况下最小面积的和最小周长的外接矩形是重合的。 有人不禁想问这是不是总成立的。 下面的例子回答了这个问题: 多边形(灰色的)及其最小面积外接矩形(左边的)和最小周长外接矩形(右边的)。

 


现在, 给定一个方向, 我们可以算出 P 的端点, 以此来确定一个外接矩形。 但是, 就如同面积问题中一样, 由于有下面的结论, 我们不必检测每个状态来获得拥有最小周长的矩形:

凸多边形 P 的最小周长外接矩形存在一条边和多边形的一条边重合。

这个结论通过枚举多边形的一条重合边有力地限制了矩形的可能范围。 

 

图示上述结论: 四条切线(红色), 其中一条与多边形边重合, 确定了外接矩形(蓝色)。


因为与其面积问题相当, 这个问题可以通过一个基于旋转卡壳的相似的算法来解决。
下属算法的输入是顺时针顺序给定的一个凸多边形的 n 个顶点。

  1. 计算全部四个多边形的端点, 称之为 xminP, xmaxP, yminP, ymaxP。
  2. 通过四个点构造 P 的四条切线。 他们确定了两个“卡壳”集合。
  3. 如果一条(或两条)线与一条边重合, 那么计算由四条线决定的矩形的面积, 并且保存为当前最小值。 否则将当前最小值定义为无穷大。
  4. 顺时针旋转线直到其中一条和多边形的一条边重合。
  5. 计算新矩形的周长, 并且和当前最小值比较。 如果小于当前最小值则更新, 并保存确定最小值的矩形信息。
  6. 重复步骤4和步骤5, 直到线旋转过的角度大于90度。
  7. 输出外接矩形的最小周长。

因为两对的“卡壳”确定了一个外接矩形, 这个算法考虑到了所有可能算出最小周长的矩形。 进一步, 除了初始值外, 算法的主循环只需要执行顶点总数多次。 因此算法是线性时间复杂度的。

问题处理同样包含三角形。 有两个特例, 具体参见洋葱三角剖分和螺旋三角剖分。

 

原文地址:http://cgm.cs.mcgill.ca/~orm/mper.html

 

转载请注明出处,谢谢!

探索凸多边形的几何特性与算法应用 本文探讨了凸多边形在计算几何中的重要应用,特别是最小面积外接矩形问题的解决方法。通过旋转卡壳技术,提出了一种高效算法,该算法仅需线性时间复杂度即可计算出凸多边形的最小面积外接矩形。此外,文章还介绍了凸多边形的最小周长外接矩形问题,以及三角剖分中“剥洋葱皮”操作的概念。通过这些算法,我们能够更高效地处理几何数据,为计算机图形学和相关领域提供了实用的解决方案。 阅读详情

相关推荐

凸多边形最小面积四边形包围盒算法

凸多边形最小面积四边形包围盒算法

最小外接矩形

1.求凸包 https://blog.youkuaiyun.com/sunflower_sara/article/details/81222376   2.求最小外接矩形 对于多边形 P 的一个外接矩形存在一条边与原多边形的边共线。 不仅不必去检测所有可能的方向, 而且只需要检测与多边形边数相等数量的矩形。      图示上述结论: 四条切线(红色), 其中一条与多边形一条边重合, 确定了外...

sunflower_sara的机器学习园地 1万+

基于STM32 HAL库的L298N四驱电机PWM调速与方向控制实战

本文详细介绍了基于STM32 HAL库驱动L298N电机控制板实现四驱小车PWM调速与方向控制的实战方法。涵盖硬件连接、GPIO与定时器配置、PWM生成、方向控制逻辑及电源管理等核心内容,并提供代码优化与常见问题解决方案,帮助开发者快速实现高效稳定的电机控制。

jump7的博客 222

凸多边形最小面积包围矩形

可以此计算2D图形的OBB 计算几何中有这样一条结果:凸多边形的最小包围矩形至少有一条边与多边形的一条边共线。 于是遍历每一条边构造包围矩形比较面积大小。说是构造包围矩形,其实只需要投影点到边以及垂直边上取距离最远两点距离得长宽后求面积即可。 /* min value */ #define FLT_MIN 1.175494351e-38F /* max value */ #defi

未命名 1万+

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

Agentic RAG:RAG从静态到具有理解、推理、决策的Agentic RAG

RAG技术演进:从静态检索到智能代理 RAG(检索增强生成)技术经历了五个关键发展阶段:基础RAG(关键词检索)、高级RAG(语义理解)、模块化RAG(灵活架构)、图RAG(知识图谱)和最新的Agentic RAG(智能代理)。Agentic RAG通过引入自主AI代理,具备反思、规划、工具使用和多代理协作能力,实现了动态决策和自适应工作流。相比传统RAG的静态检索流程,Agentic RAG能处理复杂多步推理任务,通过自我改进机制提高输出质量,并支持多专业代理协作,显著提升了RAG系统在复杂场景下的表现。

2536

C++旋转卡壳法求最小面积外接矩形

C++实现旋转卡壳法求最小面接外接矩形

MWooooo的博客 1767

NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()

Please use torch.nn.Module.to_empty() instead of torch.nn.Module.to()输出(llama) (base) [root@localhost home]# nvidia-smi Unable to determine the device handle for GPU0000:09:00.0: Unknown Error。这是典型的“孤儿进程”,但它还是。(僵尸进程),占用 GPU 资源。如果进程仍然不消失,并且。,这意味着它的父进程是。

m0_61636632的博客 2096

圆,扇形,胶囊体,凸多边形,OBB,AABB相交检测

转自:https://blog.youkuaiyun.com/qq_37043683/art 图形相交检测常常用在伤害判定,使用自定义的图形相交检测,可以在一定程度上控制性能。 比如2D格斗游戏中使用的矩形包围盒(AABB),一些动作游戏中常常出现的扇形攻击。 2D的图形相交检测能够满足大部分的需求,且可以拓展成为柱状的3D物体,2D比3D的计算复杂度会低很多,3D的图形检测原理与2D相似,本文会实现几个圆形与其他2D图形的相交检测: 1、圆形与圆形 2、圆形与胶囊体 3、圆形与扇形...

折戟 3730

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3042

仿真模型简单介绍

同时,各种以伯克利的Spice仿真程序的算法为核心的商用Spice电路仿真工具也随之产生,运行在PC和UNIX平台,许多都是基于原始的SPICE2G6版的源代码,这是一个公开发表的版本,它们都在Spice的基础上做了很多实用化的工作,比较常见的Spice仿真软件有HSpice、Pspice、Spectre、Tspice、SmartSpcie、IsSpice等,虽然它们的核心算法雷同,但仿真速度、精度和收敛性却不一样,其中以Synopsys公司的Hspice和Cadence公司的Pspice最为著名。...

小幽余生不加糖 8001

凸多边形最小周长外接矩形

这个问题和最小面积外接矩形相似。 我们的目标是找到一个最小盒子(就周长而言)外接多边形 P 。  有趣的是通常情况下最小面积的和最小周长的外接矩形是重合的。 有人不禁想问这是不是总成立的。 下面的例子回答了这个问题: 多边形(灰色的)及其最小面积外接矩形(左边的)和最小周长外接矩形(右边的)。    现在, 给定一个方向, 我们可以算出 P 的端点, 以此来确定一

bo-jwolf的专栏 2915

Python代码加密与发布方案详解

本文详细介绍了多种Python代码保护方案,从基础加密到高级混淆,以及商业化发布的最佳实践。基础加密方案包括编译为字节码和使用PyArmor基础加密,适合临时保护和小项目。商业级加密方案如Cython编译和Nuitka完整打包,提供更高的保护强度和执行效率。高级混淆方案涉及控制流混淆、字符串加密和完整混淆工具链,进一步增加逆向难度。商业化发布方案则强调许可证系统集成、硬件绑定保护和完整发布流程。此外,文章还探讨了反逆向技术、最佳实践建议和常见问题解决方法。通过组合使用这些技术,可以构建出适合不同安全需求的P

数据知道的博客 1万+

旋转卡壳

旋转卡壳 //Achen #include<algorithm> #include<iostream> #include&amp

啊宸的前博客 705

Altium Designer(AD)PCB拼版——两种方法教程

本文详细介绍了PCB拼版的设计要点与操作方法。主要内容包括:拼版目的(解决小尺寸夹持问题、提高利用率、降低成本)和三大连接方式(V-CUT、邮票孔、空心连接条)的特点与参数设置;工艺边设计规范(宽度、定位孔、Mark点等要求);拼版尺寸限制与常见错误检查;以及两种具体拼版操作方法(特殊粘贴和拼版阵列),并附有工艺边、定位孔、Mark点的绘制步骤示意图。同时提供了硬件工程师笔试面试相关资源链接。全文系统阐述了PCB拼版的核心技术和操作流程,为电子设计人员提供了实用指导。

XU157303764的博客 7598

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

旋转卡壳详解(转)

旋转卡壳详解 转载来源:https://blog.youkuaiyun.com/qq_34921856/article/details/80690822 (应博主要求 我是博主粉丝) 另一篇博客 问题描述 基本问题为O(n)求凸n角形的对踵点,而由该问题可以引申出许多的难题,他们包括: 计算距离 凸多边形直径 凸多边形宽 凸多边形间最大距离 凸多边形间最小距离 外接矩形 最小面积外接矩形 最小周长外接...

weixin_30402085的博客 138

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

旋转卡壳法总结

旋转卡壳法总结 分类: 计算几何2013-08-27 10:51 53人阅读 评论(0) 收藏 举报 目录(?)[+] 以下所有文章均转载( http://blog.youkuaiyun.com/acmaker/article/details/3176910) 转载请注明出处! 1、旋转卡壳——翻译说明文档   前一段时间看了一位国外大

pi9nc的专栏 9537

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

旋转卡壳详解

注:本文章参考自:https://blog.youkuaiyun.com/wang_heng199/article/details/74477738 问题描述 基本问题为O(n)求凸n角形的对踵点,而由该问题可以引申出许多的难题,他们包括: 计算距离 凸多边形直径 凸多边形宽 凸多边形间最大距离 凸多边形间最小距离 问题求解 计算距离 凸多边形直径 我们将一个多边形上任意两点间的距离...

qq_34921856的博客 1万+

旋转卡壳算法(转载)

https://www.cnblogs.com/little-w/p/3579603.html 转自:http://blog.youkuaiyun.com/acmaker/article/details/3188177 一、目录 一些历史: 1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当...

ako2654的博客 689

旋转卡壳介绍

一、目录 一些历史: 1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。  后来直径演化为由一对对踵点对来确定。 Shamos提出了一个简单的 O(n) 时间的算法来确定一个凸 n 角形的对踵点

蘑菇--走在通往梦想的道路上。 686

旋转卡壳——凸多边形最小面积外接矩形

凸多边形最小面积外接矩形给定一个凸多边形 P , 面积最小的能装下 P (就外围而言)的矩形是怎样的呢? 从技术上说, 给定一个方向, 能计算出 P 的端点并且构由此造出外接矩形。 但是我们需要测试每个情形来获得每个矩形来计算最小面积吗? 谢天谢地, 我们不必那么干。 对于多边形 P 的一个外接矩形存在一条边与原多边形的边共线。 上述结论有力地限制了矩形的可能范围。 我们不仅不必去检测所有可能

ACMaker的专栏 9711

旋转卡壳解决一类问题(资料)

以下所有文章均转载( http://blog.youkuaiyun.com/acmaker/article/details/3176910) 转载请注明出处! 1、旋转卡壳——翻译说明文档   前一段时间看了一位国外大牛的网站,是关于旋转卡壳技术的,内容很不错,就尝试着翻译一下。      关于旋转卡壳技术,最早是在刘汝佳、黄亮的《算法艺术与信息学竞赛》上看到的,是计算几何相关的技术,开始觉得很

duanxian0621的专栏 2577

旋转卡壳&凸包(不用一下子就学完所有)

目录前言参考博客前置知识1.极角排序2.凸包(默认逆时针)3.对踵点旋转卡壳能解决的各类问题1.计算距离1.1凸多边形直径1.2凸多边形宽1.3凸多边形间最大距离1.4凸多边形间最小距离2.外接矩形2.1最小面积外接矩形2.2最小周长外接矩形3.三角剖分3.1洋葱三角剖分3.2螺旋三角剖分3.3四边形剖分4.凸多边形属性4.1合并凸包4.2找公切线4.3凸多边形交4.4临界切线4.5凸多边形矢量和5.最薄截面5.1最薄横截带 前言 1.不用总想着一下子就学完所有知识,刷题要紧(能遇到的东西才是重点!!!)

I_have_a_world的博客 3143
上一篇: 旋转卡壳——凸多边形最小面积外接矩形
下一篇: 旋转卡壳——螺旋三角剖分
ACMaker
博客等级 码龄20年 72粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值