【问题标题】:How to calculate (approximate) rotation of a list of (x, y) points如何计算(x,y)点列表的(近似)旋转
【发布时间】:2015-05-11 14:53:34
【问题描述】:

我在 XNA 应用程序中检测多点触控手势,这样屏幕上的某些“面板”可以接受其范围内的触摸点,然后根据用户手指的移动进行移动、缩放或旋转。

但是,由于屏幕是具有 10 多个触控点的大型多点触控屏幕,因此一个面板有时可以同时接受 5 个(甚至更多)手指,而我在网上找到的大部分内容仅限于使用 2 个手势的手势仅限接触点。

我已经通过计算某个面板上所有触摸的中心点来处理移动和缩放手势:

  1. 计算当前触摸的中心点(平均 x,平均 y)
  2. 计算先前时间戳触摸的中心点(平均 x,平均 y)
  3. 使用差异来移动和缩放面板。

但我不知道如何处理旋转。有没有一种算法可以快速获得这个(近似)旋转角度?我应该计算每个点与中心之间的角度,然后使用增量值吗?有没有更好的方法?

【问题讨论】:

    标签: algorithm math rotation multi-touch gestures


    【解决方案1】:

    你如何找到距离最大的两个点并使用它们。这对我来说是最直观的感觉。

    想象一下,一只手张开,所有 5 个手指都在屏幕上旋转,在这种情况下,重要的是在拇指和小指之间旋转。

    或者考虑一个双手手势,每只手有两个手指。同样,使用这种方法,您将忽略一只手内的旋转,但会捕捉每只手的广泛扫动。

    打破这种情况的唯一方法是用一只手的两个手指旋转,另一只手在屏幕上的某个地方闲置。然后旋转似乎不起作用(例如,秒针正在旋转,但您正在寻找从手到手的角度。)

    【讨论】:

    • 谢谢,实际上我认为最后一句话应该不是问题,因为只有面板内的那些触摸正在被处理(每个面板只是屏幕的一部分),所以如果用户确实在面板的某个地方握着第二只手,那么将其视为枢轴点似乎是可以的(或者我没有正确理解最后一段?)。
    • 但是,一个有问题的用例可能是想象四个手指以类似菱形的形状放在面板上,在这种情况下,旋转两个更靠近的手指根本不会影响旋转。但我可能应该尝试以这种方式实现它,看看它是否感觉自然,也许这是一个奇怪的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2012-12-25
    • 2018-03-31
    • 2011-07-15
    • 2010-11-06
    相关资源
    最近更新 更多