所以我相信這個答案會很簡單,我會讀它,並立即開始史詩般的facepalming,但現在我花了整整一天想知道爲什麼這不工作,我只是找不到問題...對象中的負數/正數反轉?
我試圖建立一個簡單的(應該是無論如何)系統圍繞一箇中心軸旋轉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>');
}
現在,你希望看到: 一個: 開始: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
但是,相反你會得到這樣的:
一個: 開始: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中重新創建了這個測試,並且它完美地工作。我無法弄清楚的是,爲什麼heck JS是a)搞砸了變量賦值和b)沒有得出正確的結果?
任何人誰可以幫助可以放心,我必問他們有捂臉帕特里克爵士將引以爲傲的洞察力;)
噢,我的天啊,謝謝你!哈哈!好主我看了這一百萬次,從未想過我用這個變量覆蓋變量來計算第二點的事實!好神人謝謝你和傑夫在那裏你會在我完成了在這裏面對我的臉後,在新聞中讀到關於我的消息...... – Brian 2011-01-20 17:29:36