所以我确信这个问题的答案会很简单,我会阅读它并立即开始史诗般的捂脸,但现在我花了一整天的时间想知道为什么这不起作用,我只是可以'找不到问题...
我正在尝试构建一个简单的(应该是无论如何)系统来围绕中心轴旋转 2d 点,但到目前为止我发现了 2 个对我来说毫无意义的问题。
问题 1:分配给输入对象的正数/负数正以看似随机的方式翻转。问题 2:旋转数学是正确的,但结果却不是。
这是重现此问题的代码:
function doRotate(pos){
//convert angle to radians
var ang = 90 * Math.PI / 180;
//rotate points
pos.left = Math.round(pos.left * Math.cos(ang) + pos.top * Math.sin(ang));
pos.top = Math.round(pos.top * Math.cos(ang) - pos.left * Math.sin(ang));
return pos;
}
var points = {
'a':{left:32,top:32},
'b':{left:-32,top:32},
'c':{left:-32,top:-32},
'd':{left:32,top:-32}
};
for( var k in points ){
var msg = 'Start: X:'+points[k].left+' Y:'+points[k].top+'<br />';
points[k] = doRotate(points[k]);
var msg = msg+'End: X:'+points[k].left+' Y:'+points[k].top+'<br />';
document.write( '<p>'+k+':<br />'+msg+'</p>' );
}
现在你会看到: a: Start: X:32 Y:32 End: X:32 Y:-32
b:开始:X:-32 Y:32 结束:X:-32 Y:-32
c:开始:X:-32 Y:-32 结束:X:-32 Y:32
d:开始:X:-32 Y:32 结束:X:32 Y:32
但相反,你得到了这个:
a:开始:X:32 Y:32 结束:X:32 Y:32
b:开始:X:-32 Y:-32 结束:X:32 Y:32
c:开始:X:-32 Y:-32 结束:X:-32 Y:-32
d:开始:X:32 Y:32 结束:X:-32 Y:-32
我已经对数学进行了三次检查,在 2D 中围绕原点旋转点是 100% 准确的。我什至用 PHP 重新创建了这个测试,它运行良好。我无法弄清楚为什么 JS 是 a) 搞砸了变量分配和 b) 没有得出正确的结果?
任何可以提供帮助的人都可以放心,我会用帕特里克爵士引以为豪的面子向他们的洞察力致敬;)