我使用Snap.svg库创建了一个旋钮(基本上是一个圆圈),我使用Snap的变换函数和旋转参数进行旋转。
我使用两个Snap内置函数Snap.deg()
和Snap.angle()
将旋钮旋转到某个位置(以便“手”面向光标或触摸点)。我的理解是Snap.angle
与atan2函数的工作方式非常相似,而Snap.deg
将弧度值转换为度数
我遇到的问题是,默认情况下,0/360°位置是指旋钮的手(如时针)面向3:00和(顺时针移动旋钮时度数上升)我希望当时针位于6:00时,0/360°位置(顺时针旋转的度数仍在上升)
我试着加减90°,但这只会使值不准确,因为从3:00到6:00,计算出的角度介于0和-90之间。
这些值很重要,不是因为物理旋钮的外观(当前计算对此有用),而是因为我在代码中的其他位置使用计算值,并且对于正南方需要值0,对于正西方需要90 180为正北等。
Snap.deg的参考是:http://snapsvg.io/docs/#Snap.angle
答案 0 :(得分:1)
"正常"笛卡尔坐标和触发操作使用:
x = cos(theta)
y = sin(theta)
并沿着正X轴进行零度,并且当 theta 增加时,点逆时针。
开始于" 6 o'时钟"定位并顺时针旋转 ,您需要:
x = -sin(theta)
y = -cos(theta)
即。 x和y互换,否定。
因此,要从x和y获取theta,请使用:
theta = atan2(-x, -y); // usually y, x
答案 1 :(得分:0)
如果atan2(y, x)
给你一个角度,东边为0,北边为π/ 2,那么atan2(x, -y)
会给你一个角度,南边为0,东边为π/ 2。如果你想要π/ 2 west,正如Alnitak在评论中提到的那样,只需将x
替换为-x
,就可以获得atan2(-x, -y)
。