闵可夫斯基和,是两个欧几里得空间的点集的和,以德国数学家闵可夫斯基命名。
点集A与B的闵可夫斯基和就是{o|o=a+b},其中a属于A,b属于B。

对于凸包这种特殊的图形,它的闵可夫斯基和有一些较好的性质。
比如:凸包之间的闵可夫斯基和一定是凸包。

求凸包之间的闵可夫斯基和的方法。
把两个凸包的每一条向量都抠出来,按照极角序排序构成新凸包即可。
注意点和向量的去重(向量相同斜率去重)。
还有个地方可以提一下:求多个凸包的闵可夫斯基和的时候可以直接全把边拿出来一块求,没有必要两个两个求。
具体实现的时候,找出最高且最靠左的点。
先把这个点加入答案,从这个点开始把所有向量遍历一遍,最后去掉最后一个点即可(最后这个点会和第一个点重合)。
下面是C++的代码实现:

    pot P={-inf,-inf},Q={-inf,-inf},R={-inf,-inf};n=read(); for(int i=1;i<=n;i++){a[i].x=read();a[i].y=read();if(dcmp(a[i].y-P.y)==0&&dcmp(a[i].x-P.x)<0)P=a[i];if(dcmp(a[i].y-P.y)>0)P=a[i];if(i!=1)f[++cnt]=a[i]-a[i-1];if(i==n)f[++cnt]=a[1]-a[i];}n=read();for(int i=1;i<=n;i++){b[i].x=read();b[i].y=read();if(dcmp(b[i].y-Q.y)==0&&dcmp(b[i].x-Q.x)<0)Q=b[i];if(dcmp(b[i].y-Q.y)>0)Q=b[i];if(i!=1)f[++cnt]=b[i]-b[i-1];if(i==n)f[++cnt]=b[1]-b[i];}n=read();for(int i=1;i<=n;i++){c[i].x=read();c[i].y=read();if(dcmp(c[i].y-R.y)==0&&dcmp(c[i].x-R.x)<0)R=c[i];if(dcmp(c[i].y-R.y)>0)R=c[i];if(i!=1)f[++cnt]=c[i]-c[i-1];if(i==n)f[++cnt]=c[1]-c[i];}sort(f+1,f+cnt+1,cmp);pot k=P+Q+R;p[++tot]=k;for(int i=1;i<=cnt;i++){k=k+f[i];if(i!=cnt&&dcmp(f[i].x*f[i+1].y-f[i].y*f[i+1].x)==0)continue;p[++tot]=k;}tot--;k=p[1];

应用:
1.判断两个凸包是否相交
两个凸包相交的条件:存在a=b,a属于A,b属于B。
也就是存在a-b=0
对B取反后和A计算一下闵可夫斯基和,若包含点(0,0)则说明原方程优借,即两个凸包有交。

2.给出三个凸包,每次询问一个点,问能否从三个凸包中各选出一个点并连接成三角形,使得三角形的重心在询问点上。
解:
考虑重心的表达式。设三角形的三个顶点的坐标分别为(x1,y1),(x2,y2),(x3,y3),那么重心一定位于((x1+x2+x3)/3,(y1+y2+y3)/3)。
发现这个表达式显然是一个闵可夫斯基和的形式,因此,直接求出三个凸包的闵可夫斯基和然后按比例缩小一下即可。

转载于:https://www.cnblogs.com/Creed-qwq/p/10317535.html

【模板/经典题型】闵可夫斯基和相关推荐

  1. 【模板/经典题型】FWT

    FWT在三种位运算下都满足FWT(a×b)=FWT(a)*FWT(b) 其中or卷积和and卷积还可以通过FMT实现(本质上就是个高维前缀和) #include<bits/stdc++.h> ...

  2. 【模板/经典题型】并查集维护生成树

    这里的并查集是按秩合并并查集. 这种方法维护生成树的时候可以维护一个点到根的权值. 但是由于合并的时候做了一个类似换根一样的操作,因此这个权值通常只能是异或之类的. //find-union-set ...

  3. JavaScript中的经典题型(类数组、CSS Sprites、事件委托、经典去重、原型链、闭包、深浅克隆、附带思路流程和源码)

    JavaScript中的经典题型 一.JavaScript中的经典题型 1..如何判断一个数组和类数组? 首先要明白什么是类数组. 类数组:类数组是一个普通对象,他的原型是Object.而真实的数组是 ...

  4. pwn学习总结(五) —— 堆溢出经典题型整理

    pwn学习总结(五) -- 堆溢出经典题型整理 fastbin + 栈溢出 fastbin + 函数构造 fastbin + 堆执行 fastbin + malloc_hook fastbin + 栈 ...

  5. pwn学习总结(三) —— 栈溢出经典题型整理

    pwn学习总结(三) -- 栈溢出经典题型整理 ret2text ret2shellcode rop ret2libc 使用DynELF实现远程libc泄露 ret2syscall ret2libc ...

  6. java 品尝饮料,java细节经典题型

    28. 选项中哪一行代码可以替换题目中//add code here 而不产生编译错误?() [java] view plaincopy 1. public abstract class MyClas ...

  7. mysql中select 的题型_MYSQL经典题型详情解析

    学完了mysql后发现有很多地方不是很明白,于是总结了mysql的经典题型,不论是工作还是面试,我相信还是有一定帮助的. 例题一 ​ 在我的数据库中数据如下(排序有些差别,但是不影响结果) ​ 分析: ...

  8. 高中数学排列组合二项定理经典题型汇编(名师总结)

    今天老师给同学们整理出高中数学二项式定理相关内容,该题在高考中常以选择题或填空题形式出现,难度为容易或中等.下面就一起来看看二项式定理主干知识,以及常考题型~ 一.知识点梳理 二.经典题型汇总 今天的 ...

  9. 高中数学函数奇偶性知识点经典题型解题技巧【提分秘籍】

    作者:vxbomath 今天分享高中数学函数奇偶性的知识点技巧一例题讲解:通过老师的的分享希望能给同学们带来帮助! 知识点: 函数的奇偶性一.函数奇偶性的定义: (1)如果对于函数f(x)定义域内的任 ...

最新文章

  1. pcb过孔漏铜_为什么PCB板在生产中会铜线脱落?
  2. 直接在低版本IE6/7/8浏览器中使用HTML5的audio和video标签播放视频音频的办法
  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的药房药品管理系统
  4. 群签名和环签名的区别_苹果企业签名和苹果超级签名的区别
  5. Linux telnet命令
  6. DNE-1 测试方法
  7. 书单 | 读了这10本书,再也不怕黑客攻击了
  8. 如果数组的值都一样java_java – 将数组中的相同值合并在一起
  9. vue 判断是否function_vue2.0组件的prop验证中的Function类型怎么使用(向子组件传递函数对象的正确方法)?...
  10. UNITY历史版本下载列表
  11. 利用EGM96和EGM2008模型,分别计算计算高程异常、重力异常和垂线偏差。
  12. 解决ColorPix拾色器提取颜色错误
  13. 怎么看cpu的好坏 图文告诉你电脑cpu怎么看
  14. sqlserver2005 sa密码忘记了怎么办
  15. Pom文件配置参数详解
  16. 一起学习正则表达式(五)断言匹配
  17. C#:using和new关键字
  18. zb system login.php,zblog 修改后台登陆地址的教程
  19. Android淘宝三方登陆
  20. 7 Python文件与数据格式化

热门文章

  1. 试妆魔镜APP初步构想
  2. Aha!设计模式(31)-原型(5)
  3. CCF201604-4 游戏
  4. 5分钟搭建一个粗粒度「视频去重」系统
  5. 超级红队知识库等你来战-我们要站在红队之巅
  6. 北大满哥与奥迪的罗生门
  7. jsの再体验 - - ECMAScript(js基础语法)
  8. 海潮音排序算法之观音兰花手双理算法
  9. 一句话生成思维导图,【ProcessOn AI 功能上线】
  10. android学习之五·使用系统组件TabHost(使用布局文件)