gpt4 book ai didi

javascript - 将 2D 矢量旋转未知 Angular ,使其方向向量为 [1,0]

转载 作者:行者123 更新时间:2023-11-28 20:23:16 25 4
gpt4 key购买 nike

我正在尝试围绕原点旋转矢量[x,y],以便旋转完成后它位于 X 轴上。为此,我首先计算 [x,y][1,0] 之间的 Angular ,然后应用简单的 2D rotation matrix到它。我正在使用numericjs使用向量。

math.angleBetween = function(A, B) {                                                                                               
var x = numeric.dot(A, B) / (numeric.norm2(A) * numeric.norm2(B));
if(Math.abs(x) <= 1) {
return Math.acos(x);
} else {
throw "Bad input to angleBetween";
}
};

math.alignToX = function(V) {
var theta = -math.angleBetween([1,0], V);
var R = [[Math.cos(theta), -Math.sin(theta)],
[Math.sin(theta), Math.cos(theta)]];
return numeric.dot(R, V);
};

(注意:math 是我项目中的命名空间对象。Math 是古老的数学对象。)

此代码有时可以工作,但是有时无论我运行math.alignToX多少次,向量都无法接近与X轴对齐。我通过检查 y 坐标是否小于 1e-10 来测试这一点。

我还尝试使用隐式 z 坐标为 0 的 Math.atan2,但结果是相同的。不会抛出错误。一些示例结果:

math.alignToX([152.44444444444434, -55.1111111111111]) 
// result: [124.62691466033475, -103.65652585400568]
// expected: [?, 0]

math.alignToX([372, 40])
// result: [374.14435716712336, -2.0605739337042905e-13]
// expected: [?, 0]
// this value has abs(y coordinate) < 1e-10, so its considered aligned

我做错了什么?

最佳答案

如果您要旋转向量以外的其他物体,则需要使用 R 矩阵。但如果您只需要旋转向量,结果将是[Math.sqrt(x*x+y*y),0]

关于javascript - 将 2D 矢量旋转未知 Angular ,使其方向向量为 [1,0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com