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

标签 algorithm math rotation multi-touch gestures

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

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

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

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

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

最佳答案

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

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

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

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

关于algorithm - 如何计算 (x, y) 点列表的(近似)旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30170953/

相关文章:

c++ - 高效积累

python - -inf 到底是什么?

c - 在 C 中使用定点运算的 Horner 规则

c++ - 旋转,通过头文件在opengl中翻译?

c# - 如何让 LookAt 对齐 transform.up 向量而不是 transform.forward?

javascript - 三个 JS 从 matrixWorld 获取(世界)旋转

c - 搜索第一个免费索引

java - 如何在基于 BST 的数组中找到第 k 个最小元素? ( java )

python - Python 3 中的模幂实现

math - bc算术错误