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 回答