使用WPF,我需要(触摸)旋转椭圆只用一个手指(一个机械手)?
就像旧手机的径向拨号
有什么建议吗?
发布于 2014-09-03 13:47:29
做起来很容易。你所需要的只是回忆你的高中几何课程:)
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后将“传送”)。
发布于 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)。执行逆运算,你将有你的角度弧度。然后你可以执行你的旋转。
更多的关于点积和矢量数学的资源是谷歌搜索之外的.
https://stackoverflow.com/questions/25645810
复制相似问题