使用WPF我需要(触摸)仅用一根手指旋转椭圆(一个操纵器)?
像旧手机径向拨号
有任何建议吗?
答案 0 :(得分:6)
这很容易做到。您所需要的只是回忆您的高中几何课程:)
ManipulationStarted
事件,将您的起点保存在事件处理程序中。我们称之为S
(开始)。O
成为椭圆的中心。查找向量a = OS
。ManipulationDelta
处理程序中获取手指的位置。我们称之为M
。b = OM
。var angle = Math.Abs(Math.Atan2(a.X, a.Y) - Math.Atan2(b.X, b.Y));
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)
。执行反向操作,您将获得以弧度为单位的角度。然后,您可以执行轮换。
更多关于点积和矢量数学的资源是谷歌搜索...