如何计算 (x, y) 点列表的(近似)旋转

How to calculate (approximate) rotation of a list of (x, y) points

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

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

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

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

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

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

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

或者考虑两只手的手势,每只手有两个手指。同样,使用这种方法,您可以忽略单手的旋转,但可以捕捉到每只手的广泛扫描。

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