根据任意数量的点识别形状

时间:2011-03-02 22:10:20

标签: geometry

这是一个艰难的。我正在尝试编写基于任意数量的点来识别形状的代码。

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

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

2 个答案:

答案 0 :(得分:2)

一个好的第一步是减少用户尝试绘制直线的点的数量 - Ramer–Douglas–Peucker算法适用于此。

答案 1 :(得分:1)

尝试找到最适合最小二乘点的曲线,三角形和正方形。无论哪种形状具有最小的方差/标准差,都可能是可疑的。找到最合适的形状可能有点棘手。

将圆圈表征为中心点和半径。找到最小化方差的点和半径。对于给定点和半径,在这种情况下的方差很容易计算。快速Google搜索会找到一篇标题为Finding a Circle that Best Fits a Set of Points的论文,其中包含必要的数学知识。

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

使用三角形,可能会选择三个点作为角点,并最小化到两侧的距离的平方。与广场一样,您需要确定每个点实际上最接近哪一侧。

我猜想如果你能为用户提供良好的绘图技巧,那么你可能只是猜测每个形状的合适性,并检查哪个最合适。圆 - 中心是所有点的平均值,半径是距中心的平均距离。三角形 - 以中心作为所有点的平均值,距离中心最远的点是一个顶点,距离该顶点最远的点是另一个顶点,距它们之间的线最远点是第三个顶点。正方形 - 像三角形,但是增加一个点,离第三个顶点最远,得到一般的四边形。不确定这种方法会有多宽容,但对你的目的来说可能足够好吗?无论哪种方式,它都可能为解决最小二乘问题的数值方法做出良好的初步猜测。