首页 > 其他分享 >计算几何进阶

计算几何进阶

时间:2024-04-03 23:55:24浏览次数:28  
标签:一个点 进阶 线段 凸包 坐标 计算 几何 凸壳 下凸壳

二维凸包

模板题(luogu.P2742)

凸包定义

给定二维平面上的点集 \(P\),定义能包含这些点的最小凸多边形为 \(P\) 的凸包。

形象地说,凸包就是一根橡皮筋拉伸,使其包括了点集 \(P\) 中所有点,然后使橡皮筋收紧,橡皮筋就是 \(P\) 的凸包。

例如,下面用红色线段表示了一个点集的凸包(原创图):

image

凸壳定义

将点集 \(P\) 的凸包分为上下两部分,称为上凸壳、下凸壳,使得任意一条与 \(y\) 轴平行的直线都与上、下凸壳最多只有一个交点。

这是一个点集的上凸壳(原创图):

image

这是一个点集的下凸壳(原创图):

image

求解凸包

显然,可以求出上、下凸壳,然后就得到了凸包。

先考虑求下凸壳。

有两个显然的性质:

  1. 同一个下凸壳上的线段斜率随 \(x\) 坐标的增大单调不减。

  2. \(x\) 坐标最大的点一定在下图壳上。

利用这两个性质,就可以增量法求下凸壳:

  1. 将所有点以 \(x\) 坐标排序,去重。

  2. 依次加入每个点,用栈记录当前下凸壳中所有点,令当前加入点 \(p\)。

  3. 若当前凸壳中点数小于 \(2\),直接加入 \(p\)。

  4. 否则令当前下凸壳 \(x\) 坐标最大的两个点为 \(p_1,p_2\),令一个点 \(p_k\) 的 \(x\) 坐标为 \(x(p_k)\),\(y\) 坐标为 \(y(p_k)\):

  • 若线段 \(p_1 p_2\) 的斜率大于线段 \(p_2 p\) 的斜率,也就是这种情况(原创图):

    image

    因为 \(x\) 坐标最大的是点 \(p\),因此它一定在下凸壳中,为了保证下凸壳的性质,点 \(p_2\) 只能不属于下凸壳,弹栈。

    image

    然后重复此过程直到 \(p_2 p\) 为下凸壳中斜率最大的线段。

求上凸壳同理。

标签:一个点,进阶,线段,凸包,坐标,计算,几何,凸壳,下凸壳
From: https://www.cnblogs.com/wangxuzhou-blog/p/18113737/calculate-geometric-advancements

相关文章

  • 编写一个算法来计算 n 阶乘中尾随零的数量
    算法:编写一个算法来计算n阶乘中尾随零的数量解题思路:当n过大时,从1遍历至n,那么会超时,发现以下规律:n!=1*2*3*4*(1*5)*...*(2*5)*...*(3*5)...每隔5个数就会出现一个5,因此我们只需要通过n/5来计算存在存在多少个5个数,那么就对应的存在多少个......
  • 数据结构与算法分析实验3 [进阶]通过链表实现多项式加法和乘法
    文章目录大致内容介绍多项式加法代码一览头文件Poly.h内容如下:实现文件Poly.cpp内容如下:初始化增加元素删除元素功能函数遍历函数清除销毁打印多项式向多项式内插入一个元素源文件main.cpp内容如下:实现效果:多项式乘法实现方法:在Poly.h中添加声明:在Poly.cpp中添加实现:在......
  • PTA:7-115 计算星期值
    作者 周文俊单位 西南石油大学编程序实现:输入一个年份,求出这一年的1月1日是星期几,要求使用全中文形式(如“星期六”)输出,并限定不能使用循环结构。假定从公元第一天开始,就实施格里高利历法,并且公元1年1月1日为星期一。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不......
  • 03 Python进阶:MySQL
    mysql-connector安装要在Python中使用MySQL数据库,你需要安装MySQL官方提供的MySQLConnector/Python。下面是安装MySQLConnector/Python的步骤:首先,确保你已经安装了Python,如果没有安装,可以在Python官网(https://www.python.org)下载并安装最新版本的Python......
  • WPF-基础及进阶扩展合集(持续更新)
    目录一、基础1、GridSplitter分割线2、x:static访问资源文件3、wpf触发器4、添加xaml资源文件5、Convert转换器6、多路绑定与多路转换器二、进阶扩展1、HierarchicalDataTemplate2、XmlDataProvider从外部文件获取源3、TextBox在CellTemplate中的焦点问题4、让窗体......
  • 【附源码】计算机毕业设计影评网站系统(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义影评网站系统是一个专注于电影评论和评分的在线平台,旨在为观众提供一个交流观影体验、分享观点和发现新片的社区。随着电影产业的蓬勃发展,人们对于电影的需求和品......
  • 【附源码】计算机毕业设计智慧外贸平台(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义智慧外贸平台是一种基于互联网技术的智能化外贸服务平台,旨在帮助外贸企业提高业务效率、降低成本、提升竞争力。随着全球化的不断深入和国际贸易竞争的加剧,传统的......
  • mathematical-expression(MAE)数学表达式 数学函数 解析编译库,有效的快速和简单易用的数
    数学表达式SwitchtoEnglishDocument介绍本框架是一种针对数学公式解析的有效工具,能够解析包含嵌套函数,包含函数,数列步长累加等数学公式,返回值是一个数值的结果对象,同时也可以进行比较运算的操作,再进行比较的时候,返回值是一个布尔值结果对象。PS请尽量使用1.3.1版......
  • WHAT - 值得掌握的 computed 计算属性机制
    目录一、介绍二、计算属性vs方法:缓存优势三、计算属性vswatch1.主要区别:目的和用法2.watch性能问题四、计算属性底层实现五、计算属性只读和可写六、最佳实践1.不应该有副作用2.避免直接修改计算属性值一、介绍参考阅读:vue3官方文档......
  • 计算机组成与系统结构-第3章 运算方法和运算部件 上
    文章目录3.1高级语言和机器指令中的运算3.1.1C语言程序中涉及的运算数据的运算3.1.2MIPS指令中涉及的运算3.2基本运算部件3.2.1全加器和加法器全加器(FullAdder,简称FA)串行进位加法器/行波进位加法器(carryrippleadder,CRA)。3.2.2并行进位加法器3.2.3带标志加法器3......