Algorithm 将形状与点匹配
我正在尝试将已知的定义良好的形状(例如长方体、圆柱体;具有可配置的位置、旋转和尺寸)拟合到一组点,这些点具有从采样3D网格生成的法线。我当前的方法是为每个形状定义自定义拟合函数,并将其传递给第三方优化函数:Algorithm 将形状与点匹配,algorithm,shapes,data-fitting,Algorithm,Shapes,Data Fitting,我正在尝试将已知的定义良好的形状(例如长方体、圆柱体;具有可配置的位置、旋转和尺寸)拟合到一组点,这些点具有从采样3D网格生成的法线。我当前的方法是为每个形状定义自定义拟合函数,并将其传递给第三方优化函数: fitness=get\u fitness(形状参数、点) 最佳参数=外部。优化(获取适合度、初始参数、点数) (作为参考,我目前使用的是Python3和带边界的,但语言与此无关) 矩形的适应度函数类似于 def get_fitness(参数、点): 侧配度=[] 对于[顶部、右侧、底部、
fitness=get\u fitness(形状参数、点)
最佳参数=外部。优化(获取适合度、初始参数、点数)
(作为参考,我目前使用的是Python3和带边界的,但语言与此无关)
矩形的适应度函数类似于
def get_fitness(参数、点):
侧配度=[]
对于[顶部、右侧、底部、左侧、后部、前部]中的侧面:
距离=获取边距离(参数、点、边)
ndevs=获取侧面正常偏差(参数、点、侧面)
侧边配件。附加(合并区和无损检测(区、无损检测))
适合度=为每个点(侧面适合度)选择最佳侧面
返回平均值(拟合度)
然而,这意味着我必须确定异常值(有/没有缓存),并且一次只能适应一个形状
例如(在2D中),对于这些点(具有法线),我希望得到以下结果:
请注意,返回了多个形状,并且忽略了异常值。通常,输入数据中可以有多个、一个或零个形状。后处理可以删除无效(如太小)结果
注:我真正的问题是3D。我有真实世界对象的3D网格表示的片段,这意味着我拥有的信息不仅仅是上面示例中的点/法线(例如面区域和连接)
进一步阅读:
PS:我不确定StackOverflow是否是解决此问题的最佳StackExchange站点那么您将不得不使用体积处理网格。这改变了很多事情
- 三角
- 长方形
- 多边形
- 圆盘
cone = 1 disc + 1 curved surface with singular edge point parallel to disc center
box/cube = 6 rectangles/squares
cylinder = 2 discs + 1 curved surface with center axis going through discs centers
您好,您能再澄清一点吗?例如,对于您介绍的示例:形状的数量是固定的吗?两者的相对位置是固定的吗?您希望优化的是尺寸、方向还是两者?在给定的示例中,右下角的第三个矩形将使“异常值”完全有效。。。首先确定轮廓,然后创建一条穿过所有点的多段线,换句话说,首先对点进行重新排序/分组。然后在多段线上找到边和交叉/连接点,这将把你的集合划分为多个组,然后决定一个组是直线还是曲线。。。拟合它,最后在拟合的直线和曲线上检测您的形状。。。正如你所看到的,这类事情可能太多了,所以答案是…之后确定简单的形状很容易(甚至更快),例如矩形是由4条90度角的连接线组成,其中两对线的长度相同。。。所以你可以匹配+/-一些误差。。。如你所述,你的目标是3D,但什么形状是平面形状或体积形状,如球体、长方体等?你的数据集来自哪里。。。如果已经处理了原始数据中可能还有一些信息可以简化您的任务谢谢@Spektre,我已经用更多信息更新了问题。你认为我应该编辑问题以删除所有2D吗?这可能使问题更难处理