C# 如何在一系列鼠标点击中找到形状?

C# 如何在一系列鼠标点击中找到形状?,c#,.net,c#-4.0,shape,shapes,C#,.net,C# 4.0,Shape,Shapes,我想知道,在鼠标点击的一组X,Y坐标下,如何(如果有的话)确定一个形状 我们正在处理一些问题,可能会出现与形状无关的点击(coords)。这里有一个例子:绿点代表鼠标点击,搜索的是一个高度/宽度至少为x,高度/宽度最多为y,并且有四个点的正方形,红线表示找到的形状。我希望能够找到一些基本形状,如正方形、矩形、三角形和理想的圆形 我听说最小二乘法对我有帮助,但我不清楚这对我有什么帮助。我使用的是C#,示例非常受欢迎:)您可以为想要支持的每个形状创建检测器。如果形状是由一组点构成的,这些探测器就会发

我想知道,在鼠标点击的一组X,Y坐标下,如何(如果有的话)确定一个形状

我们正在处理一些问题,可能会出现与形状无关的点击(coords)。这里有一个例子:绿点代表鼠标点击,搜索的是一个高度/宽度至少为x,高度/宽度最多为y,并且有四个点的正方形,红线表示找到的形状。我希望能够找到一些基本形状,如正方形、矩形、三角形和理想的圆形


我听说最小二乘法对我有帮助,但我不清楚这对我有什么帮助。我使用的是C#,示例非常受欢迎:)

您可以为想要支持的每个形状创建检测器。如果形状是由一组点构成的,这些探测器就会发出信号

例如,您将4个点传递给四元探测器,如果这4个点在四元探测器中是否对齐,它将返回。四探测器的工作原理如下:

  • 每一点
    • 找到最近的邻点
    • 计算内角
    • 计算到邻居的距离
  • 如果所有内角均为90°+-某些阈值->正常
  • 如果所有距离相等+-某些阈值(百分比)->正常
  • 否则它就不是四边形
使用这些检测器的一种简单方法是将每个点的子集传递给它们。如果你有足够的时间,那么这是最简单的方法。如果你想取得一些成绩,你可以选择更聪明一点的分数

例如,如果四边形始终与轴对齐,则可以从任意点开始,向右移动直到到达另一点(再次使用thresold),向下移动,向左移动


这些只是一些想法,可能会进一步帮助你。我可以想象,人工智能中有一些算法可以以更实用的方式解决这个问题,可能是神经网络。

对不相关的点有限制吗?例如,在两个相关点之间必须只有一个无关点?否则,检测所有可能的形状可能非常困难和耗时。好的,在形状的x单位(距离)内没有不相关的点如何?所以在一定距离内没有内部和外部的东西?好的,我希望有一些关于点击顺序的东西。需要澄清的是:你有点击的顺序还是结果?你想在每次点击后计算形状还是在最后计算一次形状?@NicoSchertler我们只是在最后点击,我们只是想在最后寻找形状。如果你在最后使用连续点击,那么它类似于那些手势识别系统,比如Opera。如果一个手势与“正方形”手势相匹配,则该形状为正方形。