用一根手指旋转椭圆(WPF)

时间:2014-09-03 13:34:43

标签: c# wpf

使用WPF我需要(触摸)仅用一根手指旋转椭圆(一个操纵器)?

像旧手机径向拨号

有任何建议吗?

2 个答案:

答案 0 :(得分:6)

这很容易做到。您所需要的只是回忆您的高中几何课程:)

  1. 处理ManipulationStarted事件,将您的起点保存在事件处理程序中。我们称之为S(开始)。
  2. O成为椭圆的中心。查找向量a = OS
  3. ManipulationDelta处理程序中获取手指的位置。我们称之为M
  4. 查找向量b = OM
  5. 现在您可以使用一个简单的公式:var angle = Math.Abs(Math.Atan2(a.X, a.Y) - Math.Atan2(b.X, b.Y));
  6. ipi的答案也很好,但角度受cos^-1函数限制(如果你有一个纯色椭圆就没关系,否则你的对象会“传送”到达pi/2后。

答案 1 :(得分:1)

如果您知道椭圆中心的位置并且知道手指的位置,则可以使用(finger vector) - (ellipse vector)计算从椭圆到手指的矢量。

然后,当手指位置更新时,再次执行上述操作并单独存储。然后对两个向量执行点积:A . B = |A| |B| cos(theta)

如果A和B是单位向量(即大小为1),则点积((A.x * B.x) + (A.y * B.y))将产生cos(theta)。执行反向操作,您将获得以弧度为单位的角度。然后,您可以执行轮换。

更多关于点积和矢量数学的资源是谷歌搜索...