2014-09-03 70 views

回答

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));

IPI的答案也不错,但角度由cos^-1功能(如果你有一个坚实的彩色椭圆都不会有问题的限制,否则你的物体在到达pi/2后会“传送”)。

+1

啊,我没有替代'Atan2'!好答案。 – 2014-09-03 14:22:36

1

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

然后,当手指位置更新时,再次执行上述操作并将其分开存储。然后在两个矢量上执行点积:A . B = |A| |B| cos(theta)。如果A和B是单位矢量(即幅度1),点积((A.x * B.x) + (A.y * B.y))将产生cos(theta)。执行相反的操作,您将拥有弧度的角度。然后你可以执行你的旋转。

更多资源,精心的点积和矢量数学是一个谷歌搜索了......