Math 如何更改;0和xB0&引用;Snap.svg库中旋钮的位置

Math 如何更改;0和xB0&引用;Snap.svg库中旋钮的位置,math,rotation,atan2,Math,Rotation,Atan2,我使用Snap.svg库创建了一个旋钮(基本上是一个圆),我使用Snap的transform函数和rotate参数旋转该旋钮 我使用两个内置的捕捉功能,Snap.deg()和Snap.angle()将旋钮旋转到特定位置(使“手”面向光标或触摸点)。我的理解是,Snap.angle的工作原理与atan2函数非常相似,而Snap.deg将弧度值转换为度 我遇到的问题是,默认情况下,0/360°位置是当旋钮的指针(如时针)朝向3:00时,(顺时针移动旋钮时度数上升),我希望0/360°位置是在时针位

我使用Snap.svg库创建了一个旋钮(基本上是一个圆),我使用Snap的transform函数和rotate参数旋转该旋钮

我使用两个内置的捕捉功能,
Snap.deg()
Snap.angle()
将旋钮旋转到特定位置(使“手”面向光标或触摸点)。我的理解是,
Snap.angle
的工作原理与atan2函数非常相似,而
Snap.deg
将弧度值转换为度

我遇到的问题是,默认情况下,0/360°位置是当旋钮的指针(如时针)朝向3:00时,(顺时针移动旋钮时度数上升),我希望0/360°位置是在时针位于6:00时(顺时针旋转时度数仍上升)。

我试着加减90°,但这只会使值不准确,因为从3:00到6:00,计算的角度在0到-90之间

这些值之所以重要,并不是因为物理旋钮的外观(当前的计算结果是这样的),而是因为我在代码的其他地方使用了计算值,并希望正南的值为0,正西的值为90,正北的值为180等等

Snap.deg的参考值是:

如果
atan2(y,x)
给你一个角度,0表示东,π/2表示北,那么
atan2(x,-y)
将给你一个角度,0表示南,π/2表示东。如Alnitak在评论中所述,如果您想要π/2 west,只需将
x
替换为
-x
,就可以得到
atan2(-x,-y)
“法线”笛卡尔坐标和trig操作使用:

x = cos(theta)
y = sin(theta)
使零度沿着正X轴移动,点随着θ的增加逆时针扫描

要从“6点钟”位置开始并顺时针旋转,您需要:

x = -sin(theta)
y = -cos(theta)
i、 e.x和y互换,并取反

因此,要从x和y获得θ,请使用:

theta = atan2(-x, -y);    // usually y, x

请更具体地说明到底是什么不起作用。你的方法似乎是正确的。旋钮通常是顺时针旋转的,所以
π/2
应该是向西的。我明白了。我应该更清楚,我希望更少地更改旋转的值(我的图形库取决于数字),而是“映射”值(计算后)以使其处于不同的范围。有什么想法吗?@Startec:请编辑你的问题,让它更清楚。特别是,请概述您使用的库,在哪里以及如何获得价值,以及库依赖于它的位置。同时准确地指出你得到的方向和你想要的方向。