algorithm - 裁剪点云的最小边界框

标签 algorithm language-agnostic geometry 2d bounding-box

我试图找到 2d 点云的最小边界框,其中只有一部分点云可见。

给定一个粗略矩形的点云,经过裁剪后只有一个角可见:

enter image description here

点云在绿色边框处被剪裁。我知道边框在图像中的位置,而且我知道在该边框内总会恰好有矩形的一个角可见。我也知道矩形的大小。

现在我想找到包含此形状所有点的最小边界框,即使是那些在屏幕上不可见的点。因为我知道盒子的尺寸,找到可见的两个边就足以确定另外两个。
(实际上有两种可能的解决方案,因为形状的宽度和高度可以交换,但我们暂时忽略它)

enter image description here

我要找到红色的盒子。

我不需要精确解,也不需要快速解。我目前的尝试使用一种简单的蛮力算法,以 1° 的步长旋转点云并找到轴对齐的边界框。

我只需要一个标准来告诉我哪种轮换最适合这种情况。 Minimal-Area 是最小边界框的常用标准,但显然只有在所有点都可见时才有效。

可能有一些涉及凸包的最优算法,但我宁愿让解决方案尽可能简单

最佳答案

您真正需要的只是红色和绿色矩形交点角的位置。假设这些点是边界的近似值,这应该是获得这些点的一种相当可靠的方法:

  • 选择彼此距离最远的两个点 A 和 B。那是相交区域的两个角。
  • 找到与直线 AB ( example ) 两边垂直距离最大的点 C 和 D。那是区域交叉点的另外两个角。

A、B、C 和 D 是红色矩形的角以及绿色和红色矩形之间的交点的某种组合。要确定哪些是哪些,只需检查哪些在绿色矩形边框的小公差范围内。这样,您就有了足够的信息来轻松计算出红色矩形的位置。

关于algorithm - 裁剪点云的最小边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152204/

相关文章:

java - 广度优先搜索算法JAVA 8-puzzle

algorithm - BFS和DFS的目的是什么?

data-structures - 链表的应用

opengl - 在 OpenGL 中绘制圆所需的边数

math - 如何求三角形的第三个坐标

algorithm - 优先分配算法如何减少内存碎片?

algorithm - 计算 HashMap 与二进制搜索的 O(n)

language-agnostic - 我正在经历的奇怪的编码阶段

language-agnostic - 任何用于大型图形分布式处理的开源 Pregel 框架?

c# - C#中2个纬度/经度点之间的方向