如何将坐标旋转一定的度



我尝试了许多变化来旋转坐标的一个点,但当使用我调用rotateX(1, 0, degreesToRadians(45))时,我收到[-0.7071067811865475, 0.7071067811865476]。正确的答案不是[1, 1]吗?

如果我使用四舍五入得到[-1,1],我仍然得到-1,而不是1。我做错了什么?如何正确计算旋转?

45度线看起来像:

* [0, 0]
* [1, 1]
* [2, 2]
* [3, 3]
* [4, 4]

我代码:

function degreesToRadians(degrees) {
return degrees * Math.PI / 180;
}

function rotateX(x, y, angle) {
return [x * Math.cos(angle) - y * Math.sin(angle), x * Math.sin(angle) + y * Math.cos(angle)]
}

你的代码写得很好。

你问的问题有一点不对。当你调用rotateX(1, 0, degreesToRadians(45))时,它返回正确的答案[0.707..], 0.707]。我刚在控制台上试过了。

另一件事是理解为什么这是正确的。它不应该是[1,1],因为那样会延长点的长度而不是旋转它。该函数的目标是在一个圆上旋转,因此改变与原点的距离将是一个不正确的结果。你可以这样想:

根据毕达哥拉斯定理,点[1,0]距原点sqrt(1 + 0) = 1单位。如果旋转后的答案是[1,1],那么突然点将离原点sqrt(1+1) = 1.414个单位。正确的结果是它给你的,[0.707…], 0.707…]。这是2的1/2倍根号2,所以它从原点得到完美的1单位,就像它应该的那样。

如果你仍然不相信,拿一把尺子和一些坐标纸。量出一条向右的直线,数出x轴上的正方形。然后,将尺子旋转45度,数一数x中有多少个正方形。你会发现第二个结果是第一个结果的0.707倍。这是圆和三角运算的基本部分。

最新更新