Math 如何从鼠标手势生成的点列表中确定所有线段?

Math 如何从鼠标手势生成的点列表中确定所有线段?,math,drawing,gesture-recognition,gesture,Math,Drawing,Gesture Recognition,Gesture,目前我在一家软件公司实习,我的任务之一就是实现鼠标手势的识别。其中一位高级开发人员帮助我入门,并提供了使用$1 Unistroke识别器的代码/项目。我大致了解了$1 Unistroke识别器的功能和工作原理,但我有点不知所措,无法理解它的所有内部/更精细的细节 我的问题是,我试图识别向下移动鼠标,然后向上移动鼠标的手势。$1 Unistroke识别器确定我创建的手势是向下的手势,这实际上是它应该做的。我真正想让它做的是说“我识别一个向下的手势,然后是向上的手势。” 我不知道对$1 Unistr

目前我在一家软件公司实习,我的任务之一就是实现鼠标手势的识别。其中一位高级开发人员帮助我入门,并提供了使用$1 Unistroke识别器的代码/项目。我大致了解了$1 Unistroke识别器的功能和工作原理,但我有点不知所措,无法理解它的所有内部/更精细的细节

我的问题是,我试图识别向下移动鼠标,然后向上移动鼠标的手势。$1 Unistroke识别器确定我创建的手势是向下的手势,这实际上是它应该做的。我真正想让它做的是说“我识别一个向下的手势,然后是向上的手势。”

我不知道对$1 Unistroke识别器的不了解是否完全导致我搔头,但有人知道如何识别鼠标向下移动和向上移动的两种不同手势吗

这是我的想法,我认为可能会帮助我,但我希望有人谁是一个专家,甚至比我知道多一点,让我知道你的想法。非常感谢您所知道的任何帮助或资源

我的应用程序当前的工作方式:

我当前应用程序的工作方式是,当用户按住鼠标左键时,我从鼠标光标所在的位置捕获点。然后,一组点被输入到手势识别器中,然后它会吐出它认为对捕捉到的点做出响应的最佳形状/手势

我的想法:

我想做的是,在我将点输入手势识别器之前,以某种方式遍历所有点,并将它们分解为单独的直线或曲线。通过这种方式,我可以一次一条地输入每条直线/曲线,并通过下、上、左、右、对角线和曲线的基本运动来确定最终的形状/姿势

我认为有一种方法可以很好地确定我的点列表中是否有单独的线,那就是对点组进行采样并查看它们的斜率。如果一组采样点的斜率与另一组采样点的斜率相差X%,则可以安全地假设确实存在一条单独的线

我认为我的思维中可能存在的问题:

  • 我在哪里确定一行的结束和另一行的开始?如果我使用检查一组点的斜率的想法,然后确定存在一条单独的线,这并不意味着我必须找到一条单独的线的斜率。例如,如果要绘制一个具有直角的直边“L”,并对“L”拐角处的点的坡度进行采样,您将看到坡度会给出合理的指示,表明存在一条单独的线,但这些点不对应于单独线的起点

  • 如何处理曲线不断变化的斜率?我使用的手势识别器也以我想要的方式处理曲线。但我不希望我用来确定独立直线的方法继续在曲线中寻找这些所谓的独立直线,因为当我对点组进行采样时,曲线的斜率一直在变化。如果斜率连续变化超过X%,我会停止采样点吗

  • 我没有使用正确的数学“类型”来确定单独的行。数学不是我最强的科目,但我做了一些研究。我试着研究点产品,看看它是否能为我指明方向,但我不知道它是否能。有没有人用点切割来做这样或其他的事情

最后的想法、评论和感谢:

我感觉我的问题的一部分是我不知道如何强制地问我的问题。如果这个问题已经被问到(以这样或那样的方式),并且有一个可以通过谷歌搜索的解决方案,我不会感到惊讶。但我在谷歌上的搜索结果并没有提供任何解决方案,因为我还不知道该如何提问。如果你觉得这是困惑,请让我知道在哪里,为什么,我会帮助澄清它。这样做也许我在谷歌上的搜索会变得更加精确,我将能够找到一个解决方案

我只想再次感谢你阅读我的帖子。我知道它很长,但我真的不知道还有什么地方可以问它。伊玛和办公室里的其他人交谈,但我在学校里使用的所有最好的解决方案都来自StackOverflow社区,所以我非常感谢你们

编辑此帖子:


(7/6下午4:00)我想到的另一个想法是在最小/最大点之前比较所有点。例如,如果我向下移动鼠标,然后向上移动,则我的起点将是当前的最大点,而开始向上移动鼠标的点将是我的最小点。然后我可以继续看,看看在最小点之后是否有点,如果有,说可能有一条新的势能线。我不知道这对其他形状(如星星)的效果如何,但这是我要研究的另一件事。以前有人做过类似的事情吗?

如果你的问题可以缩小到将一般曲线分割成直线或平滑弯曲的部分线,那么你可以试试这个

在非常简化的情况下,比较线段的坡度并确定大于某个阈值的断点将起作用。想象一个完美的L形,两条直线之间有一个直角。显然,只要阈值在0和0之间,角点将是斜率差高于阈值的唯一点