旋转卡壳——最薄横截带

ArcGIS应用(十七)Arcgis 图要素最小边界几何计算(Minimum Bounding Geometry) 1.工具及参数 工具在Arctoolsbox中的位置和名称:Data Management Tools->Features->Minimum Bounding Geometry 工具界面即参数说明: Input Featurs:输入要素,即选择要计算的要素图层,一般就是shapefile文件了。 Output Feature Class:输出要素类,输出结果包含原始要素和选定输出的边界要素。 Geometry Type(Optional):几何类型(可选的),指定输出多边形将表示的最小 阅读详情

最薄横截带

考虑下述设备放置问题:一个“消费群体群”的集合是以个体呈现为平面上凸多边形的一个家庭 F 给出的。 我们的目标是找到一个“设备”, 一条平面上的直线, 使得线到消费者的最大距离最小。

最后一点需要澄清。 直线与任何一个多边形的距离都是指多边形上一点到线的正交距离的最小值。 因此,每个多边形到线的距离是唯一的。
现在, 给定家庭中各个呈多边形的成员和平面上的一条直线, 每个多边形都有一个到线的距离。 因此, 对于整个家庭存在一个最大的线-多边形距离。 这个距离同时依赖于线与各个家庭成员多边形。
这个问题的目标是: 给定一个特定的家庭成员多边形集, 找到使得这个最大距离最小的线。 这个问题同样存在着其他版本, 常见的有找一条线使得距离和最小, 或是使得多边形带权距离和最小。

这里的提出的结论是Robert和Toussaint在1990年发表的。
主问题等价于找到一个宽最小的带(一个平面上由两条平行线为边界的区域)和所有的家庭成员多边形相交。因此, 带的中心(与带的边界线平行等距的线)就是所求的使得最大距离最小的线。

为了讨论这个问题我们做如下定义:

平面上的一条直线 l , 其方程为 ax + by + c = 0 (且 b > 0 或 a = -1)将平面分为两个区域:上半平面 Hu( l) 中的点 p = ( px, py) 满足 apx + apy + c >= 0 , 且下半平面 Hl( l) 中的点 p = ( px, py) 满足 apx + apy + c <= 0 。
通过上面的定义, 如果线是铅直的, 上半平面为 x 轴的负方向。

进一步地, 一个带可以定义为一条线的上半平面和另一条(平行)线的下半平面的交集。

给定一个凸多边形 P , 一个方向角 theta , 下切线 tl( P, theta) 是一条与 x 轴正半轴夹角为 theta 的线, 他与 P 相交并且 P 在 tl( P, theta) 的上半平面。 交点(可能不止一个)称为下顶点。
同样的, 定义上切线和上顶点。
给定一个家庭的多边形集合和一个固定的方向角, 就确定了一个下顶点集和上顶点集。

最后, 考虑下面的结论:
给定家庭 F 的多边形集, 和一个方向角 theta , 一个带 S (由 Hu( l1) 和 Hl( l2) 大于0的交集得到)是 F (在此方向上)最小宽度带, 当且仅当 F 中存在两个多边形 P 和 Q 有
  • P 和 Hu(l1) 的交在 l1 上。
  • Q 和 Hl(l2) 的交在 l2 上。

其主要的结论是: 一个家庭 F 的凸多边形集的最小宽度带(一个给定方向 theta 上)由 l1 和 l2 确定当
l1= tl( CH( UP( F, theta)), theta) 且
l2= tu( CH( LP( F, theta)), theta) 成立。 

一个家庭的凸多边形集, 以及给定角度上的最小带宽。 下顶点和上顶点的凸包, 上述的结论如图所示。 注意到两个多边形和带的交都只在一个顶点上出现。


因此, 只要确定了家庭多边形集的下顶点和上顶点的序列, 就能通过计算凸包得到给定方向上最小宽度带。就如Robert和Toussaint解释的, 幸运的是这些凸包不需要每次都完全重新计算: 他们需要更新即可。 实际上, 考虑两个接近的方向:许多(或者是全部)多边形对于这两个方向拥有相同的上顶点和下顶点。 这个结果同样暗示这只有有限的方向上(当下顶点或上顶点变化时)需要检测。

这里的焦点在于旋转卡壳模型, 而非关系到算法的细节。 本文打算利用旋转卡壳来计算多边形的上顶点和下顶点。下面是算法的主要实现过程。 给定一个凸多边形 P :
  1. 找到拥有最小和最大 y 坐标的顶点。 标记为 p 和 q 并且通过他们构造水平切线。
  2. 逆时针将切线旋转过 theta 角直到其中一条与其中一个多边形的边平行。
  3. 如果顶点在 p 后被击出(按照逆时针方向), 那么 p 就是对于角度0(包括)到角度 theta(不包括) 之间的下顶点。 如果顶点是在 q 后被击出, 那么 q 就是同样角度范围内的上顶点。 这两个情况当边平行的时候也可能同时发生。
  4. 更新当前点为新击出的顶点, 并更新当前角度。
  5. 重复执行步骤2到步骤4, 同时跟新角度区间, 知道新的角度大等于180度(在哪一点先回到了最初的位置, 但此时次序颠倒)。

线与其中一个多边形的一条边平行的方向称之为 临界方向 。 他们只在上顶点和下顶点处发生变化。 对于一个临界方向, 因为线穿过两个顶点, 当逆时针旋转时下顶点或是上顶点之一被定义为多边形与线的一个交点。

一旦临界方向(按照顺序给出)得到, 一个带就能在第一个方向上进行计算。 然后, 在第二个临界方向上, 至少一个上顶点或是下顶点被更新。 因此, 凸包此时需要更新, 而非重新计算一次。 一旦完成上述步骤, 新的带就构造成功了, 并且他的宽度(边界间的正交距离)被算出。 对所有临界方向重复这个操作。 注意到如果任何点处如果产生了一个宽度为0的带f, 这个过程就能够因为找到一条穿过所有家庭多边形的线而终止了。

对于完整的算法描述, 正确性讨论和运行时间分析, 见作者的论文:

J.-M. Robert, G.T. Toussaint. Computational geometry and facility location. Proc. Internatioanl Conf. on Operations Research and Management Science, Manila, The Philippines, Dec. 11-15, 1990. pp B-1 to B-19.

 

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

 

转载请注明出处,谢谢!

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

相关推荐

python:numpy分享(保姆级教程)

创建数组:array和ndarray、rand()、randn()、arange()、randint()、uniform()astype()基础函数:ceil()、floor()、rint()、argmax()、argmin()、cumsum()、cumprod()numpy 是数据分析必不可少的第三方库,具有高性能的特点,多用于做数组分析。内置函数:ceil()、floor()、rint()主要用于数组计算,支持多维数组。array和ndarray。比较函数:all、any。去重函数:unique。

sulin123123的博客 1730

凸多边形的宽度

求凸多边形的宽度; 凸多边形的宽度就是凸多边形的最短对踵点; #include&lt;bits/stdc++.h&gt; using namespace std; const int N=115; int n; double ans=1e100; struct P { int x,y; P() {} P(int _x,int _y) { x=...

wuxiaowu547的博客 1753

QGIS实用功能:加载天地图与下载指定区域遥感影像

本文聚焦 QGIS 软件实用功能,详细介绍在 QGIS 中加载天地图及其他常用底图(如 Google Maps、Bing Maps)的完整流程,涵盖天地图插件安装、密钥获取与配置、插件拓展使用等操作。同时,以 上海市瑞金二路街道为例,分步讲解下载指定区域遥感影像的方法,包括图层选择、坐标系设置、分辨率调整等关键参数配置。此外,还介绍了影像精准裁剪技巧,为 GIS 数据获取与处理提供实用指导,助力用户高效使用 QGIS 开展地理信息相关工作。

weixin_43679228的博客 7433

旋转卡壳——凸多边形的宽度

    凸多边形的宽度定义为平行切线间的最小距离。 这个定义从宽度这个词中已经略有体现。 虽然凸多边形的切线有不同的方向, 并且每个方向上的宽度(通常)是不同的。 但幸运的是, 不是每个方向上都必须被检测。     我们假设存在一个线段 [a,b], 以及两条通过 a 和 b 的平行线。 通过绕着这两个点旋转这两条线, 使他们之间的距离递增或递减。 特别的, 总存在一个 特定旋转方向 使得两条线之

ACMaker的专栏 4625

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2551

手把手教你用RoboTwin训练RDT模型:从环境配置到实战微调(避坑指南)

本文提供了一份详尽的避坑指南,手把手教你如何在RoboTwin开源仿真环境中,从零开始配置环境、采集数据并完成RDT视觉语言动作模型的实战微调。文章涵盖了环境搭建、数据流水线构建、模型配置与训练等关键步骤,旨在帮助研究者和开发者高效利用仿真数据,低成本探索具身智能应用。

weixin_29094979的博客 132

旋转卡壳——目录页

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

ACMaker的专栏 8229

YOLOv12改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 什么!不知道如何改进模型⁉️ 本专栏所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行,性价比极高。2️⃣ 找不到合适的模块⁉️ 所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,并进行二次创新,新颖度高,创新度高,能够适应不同的任务场景。3️⃣ 不确定自己改进的步骤、结果是否正确⁉️ 订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容,非常适合新手。4️⃣ 团队内发表数篇SCI论

Limiiiing的博客 2万+

旋转卡壳法总结

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

天亮说晚安 2325

数字 IC 笔试面试必考点(1)FPGA 芯片架构

FPGA 芯片架构是非常重要的,如果你不了解 FPGA 芯片内部的详细架构,那么...

新芯设计的博客 2807

YOLOv8与Swin Transformer的完美结合:如何提升目标检测的精度与速度

Swin Transformer(Shifted Window Transformer)是一种新型的视觉Transformer架构,采用了局部窗口(Window)和局部窗口偏移(Shifted Window)的策略,极大减少了计算复杂度,同时保持了全局感知能力。局部窗口注意力:每个窗口内的元素进行自注意力计算,减少计算量。窗口偏移:通过在不同层次引入窗口偏移,增强了全局信息的交互。层级设计:通过堆叠多个层次的模块,逐渐捕捉不同尺度的特征。

shrgegrb的博客 2151

计算几何之旋转卡壳算法

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

素宇的博客 657

Claude Code(7):从零创建你的第一个 Skill

在前面的文章,我们介绍了 Skills 的基本概念,这篇我们深入实战,从零开始创建你的第一个 Skill,并逐步解锁所有配置项,让 Claude Code 真正熟悉你的测试规范和习惯。

blues_C的博客 647

旋转卡壳算法

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

caodayong的专栏 1035

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

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

旋转卡壳

http://cgm.cs.mcgill.ca/~orm/rotcal.frame.html 旋转卡壳 一些历史: 1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。 后来直径演化为由一对对踵点

lyc 1353

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

旋转卡壳介绍

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

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

旋转卡壳算法及应用 (参考论文)

多看论文开眼界! 转自:http://blog.youkuaiyun.com/acmaker/article/details/3188177 一、目录 一些历史: 1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点...

dianzhixie7235的博客 445

旋转卡壳算法(转载)

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

几何算法学习

旋转卡壳能够解决的一些问题: 他们包括: 计算距离  凸多边形直径  凸多边形宽  凸多边形间最大距离  凸多边形间最小距离 外接矩形  最小面积外接矩形(矩形的一条边必与原凸多边形一条边重合,利用2组平行线进行卡壳)  最小周长外接矩形(最小周长外接矩形并非恒与最小面积外接矩形相同,不过因为都存在矩形的一条边必与原凸多边形一条边重合的性质,故,方法一样) 三角剖分  洋葱

潜心阁 711

旋转卡壳算法总结

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

Cloth的博客 3278

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

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

duanxian0621的专栏 2577
上一篇: 旋转卡壳——凸多边形矢量和
下一篇: 旋转卡壳——对踵点对(定义)
ACMaker
博客等级 码龄20年 72粉丝 0原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值