Geometry 基于任意数量的点识别形状

Geometry 基于任意数量的点识别形状,geometry,Geometry,这是一个艰难的过程。我正在尝试编写代码,根据任意数量的点识别形状 基本上,通过一个触摸界面,用户将“绘制”一个形状(通过一定数量的触摸点进行跟踪),我在2d表面上留下了一些点 基于这些点,我需要大致确定轮廓形状是三角形、正方形还是圆形。最简单的方法是什么?有什么想法吗?试着用最小二乘法找出最适合点的曲线、三角形和正方形。无论哪个形状的方差/标准偏差最小,都可能是可疑的。找到最合适的形状可能有点棘手 将圆描述为圆心和半径。找到使差异最小化的点和半径。对于给定的点和半径,这种情况下的方差很容易计算。

这是一个艰难的过程。我正在尝试编写代码,根据任意数量的点识别形状

基本上,通过一个触摸界面,用户将“绘制”一个形状(通过一定数量的触摸点进行跟踪),我在2d表面上留下了一些点


基于这些点,我需要大致确定轮廓形状是三角形、正方形还是圆形。最简单的方法是什么?有什么想法吗?

试着用最小二乘法找出最适合点的曲线、三角形和正方形。无论哪个形状的方差/标准偏差最小,都可能是可疑的。找到最合适的形状可能有点棘手

将圆描述为圆心和半径。找到使差异最小化的点和半径。对于给定的点和半径,这种情况下的方差很容易计算。快速谷歌搜索找到一篇题为“必要的数学”的论文

正方形有一个中心点、边长和旋转角度(0到90度)。方差的计算有点棘手,因为您需要确定象限以找到距离需要最小化的最近边,或者计算到所有四个边的距离并只保留最小的边。同样的原理,但是你有三个变量,而不是两个

对于三角形,可能选择三个点作为角点,并最小化到边距离的平方。和正方形一样,您需要计算出每个点实际上最靠近哪一侧


我想,如果你能为用户提供良好的绘图技能,那么你可能只需要猜测每个形状的合适程度,然后检查哪个最合适。圆心是所有点的平均值,半径是到圆心的平均距离。三角形-将中心作为所有点的平均值,距中心最远的点是一个顶点,距该顶点最远的点是另一个顶点,距它们之间的直线最远的点是第三个顶点。类似正方形的三角形,但再添加一个点,距离第三个顶点最远的点,以获得一般四边形。不确定这种方法会有多宽容,但对于您的目的来说是否足够好?不管怎样,对于解决最小二乘问题的数值方法来说,这可能是一个很好的初始猜测。

一个很好的第一步是减少点的数量,以找到用户试图画直线的位置-该算法适用于此。

对于机械土耳其人来说,这只是另一个很棒的任务:D@svth:+1对于提问者分享代码非常感谢你的指点!我现在已经使用Douglas-Peucker.Btw让一切都运行得相当好了,如果有人遇到这个线程并想要我的Douglas-Peucker的Objective C实现,这里是: