当前位置: 首页 > 知识库问答 >
问题:

最小封闭圆柱体

宋志学
2023-03-14

对于三维点云,有没有一种算法可以找到半径最小的圆柱体?我知道2D最小包围圆的情况是可以解决的(例如Python中的线程最小包围圆,代码错误),但对于3D有什么工作方法吗?

编辑1:OBB。下面是一个圆弧状点云的例子。这个工具可以找到最小的封闭圈https://www.nayuki.io/page/smallest-enclosing-circle

圆是由三个点定义的,其中两个点几乎位于一个直径上,所以很容易估计中心轴在哪里。圆点的“拳击”将产生一个明显从真正的中心移动很多的盒子的中心。

我的结论是主元分析方法不是一般的。

编辑3:OBB与PCA和OLS的比较。一个主要的区别是OBB只依赖于几何形状,而PCA和OLS依赖于总的点数,包括集合中间的点数,这些点数不影响形状。为了使它们更有效,可以包括数据准备步骤。首先,求凸包。第二,排除所有内部点。然后,沿着船体的点可以不均匀地分布。我会建议把它们全部移除,只留下多边形的船体,并用网格覆盖它,那里的节点将是新的点。PCA或OLS应用于这种新的点云应该提供更准确的圆柱轴估计。

所有这些都是不必要的,如果OBB提供一个轴,尽可能平行于封闭的圆柱轴。

RIPI2的“中间点”方法:它只在2D中工作。在3D情况下,柱面轴不能与任意两点之间的单个段相交。

共有1个答案

鲁乐
2023-03-14

寻找精确解似乎是一个非常困难的问题。通过在轴方向上做假设,通过旋转云(你只保留凸壳的顶点)并将这些点投影到XY,你确实可以转向一个极小围圆问题。

但你必须对可能的方向做几个假设。为了得到精确的解,你应该尝试所有的方向,这样围圆是由不同的顶点对或三个顶点定义的。这定义了旋转角空间中的复杂区域,对于每个区域都有一个点达到最优值。这涉及到一个具有非线性约束的高度非线性最小化问题,似乎很难处理。

在这个阶段,我所能推荐的是一个近似的解决方案,这样你就可以尝试一个固定数量的预定义方向,并解决相应的圆拟合。由于解是近似的,所以近似圆拟合也可以。

 类似资料:
  • 本文向大家介绍three.js实现圆柱体,包括了three.js实现圆柱体的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了three.js绘制圆柱体的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 一个点的cylindrical coordinates(圆柱坐标)。 构造器(Constructor) Cylindrical( radius : Float, theta : Float, y : Float ) radius - 从原点到x-z平面上一点的距离 默认值为 1.0. theta - 在x-z平面内的逆时针角度,以z轴正方向的计算弧度。默认值为0。 y - x-z平面以上的高度 默

  • 一个用于生成圆柱几何体的类。// iOS iframe auto-resize workaround if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) { const scene = document.getElementById( 'scene' ); scene.style.width = getComputedStyle( sc

  • 本文向大家介绍python绘制圆柱体的方法,包括了python绘制圆柱体的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python绘制圆柱体示的具体代码,供大家参考,具体内容如下 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍Opencv绘制最小外接矩形、最小外接圆,包括了Opencv绘制最小外接矩形、最小外接圆的使用技巧和注意事项,需要的朋友参考一下 Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle。 minAreaRect方法原型: 输入参数points是所要求最小外结矩的点集数组或向量; minEnclosingCircl

  • 问题内容: 不能重复,因为我在问pandas。 我有一些带有数字的列。我跑 那成功地截断了长的小数点,而不是正确地写了:,但是我仍然得到 或带有尾随零。 跑完大熊猫后,如何摆脱所有列中的尾随零 ? 我想将数据帧另存为csv,并且需要数据来显示我希望的方式。 问题答案: df = df.round(decimals=6).astype(object) 转换为将允许混合表示。但是,请记住,从性能角度来