首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用一个手指旋转椭圆(WPF)

用一个手指旋转椭圆(WPF)
EN

Stack Overflow用户
提问于 2014-09-03 13:34:42
回答 2查看 340关注 0票数 0

使用WPF,我需要(触摸)旋转椭圆只用一个手指(一个机械手)?

就像旧手机的径向拨号

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-03 13:47:29

做起来很容易。你所需要的只是回忆你的高中几何课程:)

  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后将“传送”)。

票数 6
EN

Stack Overflow用户

发布于 2014-09-03 13:44:10

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

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

如果A和B是单位向量(即1级),则点积((A.x * B.x) + (A.y * B.y))将产生cos(theta)。执行逆运算,你将有你的角度弧度。然后你可以执行你的旋转。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25645810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档