一、概述

官方定义:两个图形A,B的闵可夫斯基和C={a+b|a∈A,b∈B}
通俗一点:从原点向图形A内部的每一个点做向量,将图形B沿每个向量移动,所有的最终位置的并便是闵可夫斯基和(具有交换律)

例如,平面上有两个三角形,其坐标分别为A={(1,0),(0,1),(0,-1)}及B = {(0, 0), (1, 1), (1, −1)},则其闵可夫斯基和为A + B = {(1, 0), (2, 1), (2, −1), (0, 1), (1, 2), (1, 0), (0, −1), (1, 0), (1, −2)}。若推广至流形的连续集,闵可夫斯基和从几何上的直观体现即是A集合沿B的边际连续运动一周扫过的区域与B集合本身的并集,也可以使B沿着A的边界连续运动扫过区域与A自身的并集

本文只讨论凸包的闵可夫斯基和。如下图,粉色区域便是三角形和一个不规则四边形的闵可夫斯基和

二、怎么求

闵可夫斯基和的边是由两凸包构成的
也就是说把两凸包的边极角排序后直接顺次连起来就是闵可夫斯基和

凸包肯定会存在于A的凸包+B的凸包上。

我们可以给这个两个点集做一次凸包,然后再从这两个点集中分别x最小中y最小的点开始。

出来之后,可能是这样的。

就是M点开始,我们进行找点运动。

可以感性理解:下一个凸包上的点是或者。前提是已经做好凸包,也就是说,点是逆时针排布的。

所以这样,我们就可以做出来了。

三、算法

求凸包之间的闵可夫斯基和的方法。
把两个凸包的每一条向量都抠出来,按照极角序排序构成新凸包即可。
注意点和向量的去重(向量相同斜率去重)。

还有个地方可以提一下:求多个凸包的闵可夫斯基和的时候可以直接全把边拿出来一块求,没有必要两个两个求。
具体实现的时候,找出最高且最靠左的点。

先把这个点加入答案,从这个点开始把所有向量遍历一遍,最后去掉最后一个点即可(最后这个点会和第一个点重合)。
下面是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];

转载于:https://www.cnblogs.com/icmzn/p/10754758.html

闵可夫斯基和(Mincowsky sum)相关推荐

  1. 数论六之计算几何干货——计算几何模板解释全集 及 模板检验训练场

    文章目录 点和向量及运算 直线和线段 求解点到直线的距离/点在直线上 求解点到线段的距离/点在线段上 求解两条线段是否相交 求解两直线的交点 多边形 求解多边形面积 求解多边形重心 求解判断定点与多边 ...

  2. 一个关于随机矩阵谱范数的不等式

    一个关于随机矩阵谱范数的不等式 在许多随机图模型的问题中,采用图的邻接矩阵 A A A来研究总体 E [ A ] E[A] E[A] 的性质,前者是 n × n n\times n n×n的随机矩阵. ...

  3. 【APIO2016】Fireworks【闵可夫斯基和】【凸包向量和】【可并堆】

    题意:给一棵带边权的树,可以花费 111 的代价把一条边的边权修改 111,一条边可以修改多次,求使得根到叶子距离相等的最小代价. n≤3×105n\leq 3\times 10^5n≤3×105 先 ...

  4. 【洛谷P5114】八月脸【边分治】【闵可夫斯基和】

    题意:一棵 nnn 个点的树,每个点有两个权值 ai,bia_i,b_iai​,bi​,有黑白两种颜色.mmm 次询问,每次给定一个 kkk,求一条端点异色的路径,使得 k∑ai+∑bik\sum a ...

  5. 洛谷 P4557 战争:凸包+闵可夫斯基和

    题意: 给出两个凸包AAA和BBB,有若干询问,每次给出一个向量V=(x,y)V = (x,y)V=(x,y),将BBB按照VVV的方向平移到B′B'B′,然后回答AAA和B′B'B′是否相交. 题解 ...

  6. 机器学习中的数学——距离定义(三):闵可夫斯基距离(Minkowski Distance)

    分类目录:<机器学习中的数学>总目录 相关文章: · 距离定义:基础知识 · 距离定义(一):欧几里得距离(Euclidean Distance) · 距离定义(二):曼哈顿距离(Manh ...

  7. Codeforces Round #574 (Div. 2) F. Geometers Anonymous Club (闵可夫斯基求和)

    题目链接:http://codeforces.com/contest/1195/problem/F 题意:现在有nnn个凸包,标号分别为1−n1-n1−n给出所有的顶点坐标,有qqq次询问,每次询问给 ...

  8. 【Python经典题目】闵可夫斯基距问题

    题目 定义一个高维空间样本点集类HDPoints,须包含以下数据属性与方法属性: (a)数据属性self.points:类型为列表,由多个子列表构成,每个子列表表示高维空间中的一个数据点,且数据维度可 ...

  9. 欧氏距离,曼哈顿距离,闵可夫斯基距离,马氏距离,汉明距离

    欧氏距离 欧氏距离( Euclidean distance)是一个通常采用的距离定义,它是在N维空间中两个点之间的真实距离. 曼哈顿距离 曼哈顿距离是种使用在几何度量空间的几何学用语,用以标明两个点在 ...

最新文章

  1. Nginx配置使用积累[不断更新]
  2. Java 动态语言
  3. 2015-10-11 Sunday 晴 ARM学习
  4. win10便签常驻桌面_win7桌面便签小工具可以作为工作计划软件使用吗?
  5. Linux centos查看cpu信息命令
  6. oralce load的时候使用触发器会导致load慢吗_一次FGC导致CPU飙高的排查过程
  7. 不忘本~explicit和implicit修饰符
  8. leetcode214. 最短回文串
  9. 【拨云见日】企业上云时代,多样化的公有云服务你了解多少?
  10. 100个囚犯和灯泡C语言,关于国王和100个囚犯
  11. 洛谷P2073 送花 [2017年6月计划 线段树01]
  12. 20190906:(leetcode习题)Shuffle an Array
  13. 大华存储服务器系统,大华重磅推出64盘位网络视频存储服务器
  14. 丰田凯美瑞android系统,丰田第八代凯美瑞装了它,让中控“大脑”更智能!
  15. c语言中按位取反 程序,C语言问题,if条件里面按位取反
  16. 自定义敏感词检测器_使用转移学习创建自己的自定义对象检测器
  17. 微信公众号使用:在微信公众号文章中嵌入小程序的方法
  18. 最新《择善教育》C/C++黑客编程项目实战教程
  19. 1.1 PMBOK指南的目的 -- 项目管理知识体系指南(PMBOK指南)(第五版)
  20. FPGA分频电路实现(奇数,偶数,小数半分频,任意分频)

热门文章

  1. mysql操作总结_mysql常用操作总结大全
  2. linux time dev null,/dev/null丟失后
  3. mysql 轨迹数据存储_python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库...
  4. selenium:使用已打开的chrome浏览器
  5. nginx stream代理
  6. 安装qgis显示python错误_ArcGIS 与 QGIS 3 冲突的解决方案
  7. html应用模板,HTML5--应用网页模板
  8. C语言中低位存放,C语言 大端小端存储解析以及判断方法
  9. java类用三木运算编译不生效_Java 中的三目运算符使用不当所导致的问题
  10. 干货 | 仅需10分钟,开启你的机器学习之路!