【发布时间】:2013-07-26 22:23:12
【问题描述】:
我正在尝试围绕原点旋转矢量[x,y],这样当旋转完成时,它位于 X 轴上。为此,我首先计算[x,y] 和[1,0] 之间的角度,然后对其应用简单的二维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 来对此进行测试。
我也尝试过使用Math.atan2,隐式z 坐标为0,但结果是一样的。不会抛出错误。一些示例结果:
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
我做错了什么?
【问题讨论】:
标签: javascript math geometry