-1

我使用 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

4

2 回答 2

1

“正常”笛卡尔坐标和三角运算使用:

x = cos(theta)
y = sin(theta)

并使零度沿正 X 轴移动,随着theta的增加,点逆时针扫描。

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

x = -sin(theta)
y = -cos(theta)

即 x 和 y 交换,并取反。

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

theta = atan2(-x, -y);    // usually y, x
于 2014-03-28T09:00:08.870 回答
0

如果atan2(y, x)给你一个角度,0 代表东方,π/2 代表北方,那么atan2(x, -y)会给你一个角度,0 代表南方,π/2 代表东方。如果你想要 π/2 西,正如 Alnitak 在评论中提到的那样,只需替换x-x,你就会得到atan2(-x, -y)

于 2014-03-28T08:40:48.507 回答