3

回転行列を使用してjavascriptでキャンバスの正方形を回転させようとしています。これが私のコードです。

function square() {
    this.cord=[[0,0],[-25,25],[25,25],[25,-25],[-25,-25]];  
}           

var a=new square();

function rotate() {
    var cos=Math.sqrt(2)/2;
    var sin=Math.sqrt(2)/2;
    for(var j=0;j<a.cord.length;j++) { 
        a.cord[j][0]=a.cord[j][0]*cos-(a.cord[j][1])*sin;
        a.cord[j][1]=a.cord[j][1]*cos+(a.cord[j][0])*sin;
    }
}

しかし、奇妙なことが起こり、正方形は徐々に縮小し、正しく回転しません。

私のコードの何が問題になっていますか?

4

1 に答える 1

2

計算する前に、値a.cord[j][0]を引き出す必要があります。a.cord[j][1]の計算はa.cord[j][1]、元の値ではなく、新しく計算された新しい値に基づいています。

それで:

for(...)
{
    var x = a.cord[j][0];
    var y = a.cord[j][1];

    a.cord[j][0] = x*cos - y*sin;
    a.cord[j][1] = y*cos + x*sin;
}
于 2013-03-22T16:13:30.733 に答える