だから、これに対する答えは簡単なものになると確信しており、それを読んですぐに壮大なフェイスパルミングを開始しますが、現時点では、なぜこれが機能していないのか疑問に思って一日を過ごしました。問題を見つけます...
中心軸を中心に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:開始: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
しかし、代わりにあなたはこれを手に入れます:
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)正しい結果が得られないのかということです。
パトリック卿が誇りに思うであろうフェイスパームで彼らの洞察に敬意を表するので、助けることができる人は誰でも安心するかもしれません;)