我试图在JS代码中实现任意旋转矩阵,但最终得到了错误的值。
function dotProduct(v1, v2) {
return Math.round(v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]);
}
function matrixMultiply(matrix, v) {
return [dotProduct(matrix[0], v), dotProduct(matrix[1], v), dotProduct(matrix[2], v)];
}
function toRadians(angle) {
return angle * (Math.PI / 180);
}
function aRotate(p, v, a) {
var ca = Math.cos(a),
sa = Math.sin(a);
var r = [
[ca + v[0] * v[0] * (1 - ca), v[0] * v[1] * (1 - ca) - v[2] * sa, v[0] * v[2] * (1 - ca) + v[1] * sa],
[v[0] * v[1] * (1 - ca) + v[2] * sa, ca + v[1] * v[1] * (1 - ca), v[1] * v[2] * (1 - ca) - v[0] * sa],
[v[2] * v[0] * (1 - ca) - v[1] * sa, v[2] * v[1] * (1 - ca) + v[0] * sa, ca + v[2] * v[2] * (1 - ca)]
];
return matrixMultiply(r, p);
}
var p = aRotate([100, 0, 0], [0, 0, 100], toRadians(90));
console.log(p);
我将(100,0,0)
绕轴(0,0,100)
旋转90
度。我希望得到(0,100,0)
,但我得到(0,10000,0)
。
有谁知道什么是错的?
由于