0
我试着在JavaScript中使用旋转矩阵来实现JavaScript旋转,但由于某种原因,我得到了一些意想不到的结果 - 而不是绕着一个点移动,我的图形沿着一条线移动。这里我提供了完全可重复的例子,它证明了在旋转点和中心之间的旋转距离改变之后。这里是:JavaScript中的浮点数精度或算法错误
var alpha = 0.10146071845187077;
var cos_ = Math.cos(alpha);
var sin_ = Math.sin(alpha);
var center = [4861165.687852355,7606554.432771027];
var pointBefore = [4847712.770874163, 7610682.032298427];
var dist1, dist2, x1, y1, x2, y2, pointAfter = [];
// 1. substract + 2. rotate + 3. get back
// 1.
x1 = pointBefore[0] - center[0];
y1 = pointBefore[1] - center[1];
// 2.
x2 = cos_ * x1 - sin_ * y1;
y2 = sin_ * x1 + cos_ * y1;
// 3.
pointAfter[0] = x2 + center[0];
pointAfter[1] = y2 + center[1];
// Check distances
dist1 = Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2));
dist2 = Math.sqrt(Math.pow(pointAfter[0] - center[0], 2) +
Math.pow(pointAfter[1] - center[1], 2));
console.log(JSON.stringify({dist1: dist1, dist2: dist2}));
// -> {"dist1":14071.888753138577,"dist2":14071.88875313881}
我希望我犯了一些数学错误,但我看不到它们。
预期结果是什么?正如你所看到的,之前的距离与之后的距离相同,这样权证实际上是在旋转而不是在一条线上移动。 – Bergi