围绕一点旋转1000个随机点

时间:2013-01-20 21:28:21

标签: javascript math rotation 2d

我生成1000个随机点,我想围绕某个定义的点旋转点 x和y。

我用过:

px = Math.cos(theta) * (px-ox) - Math.sin(theta) * (py-oy) + ox

py = Math.sin(theta) * (px-ox) + Math.cos(theta) * (py-oy) + oy

但问题是点在旋转一段时间后开始收敛到旋转点。

这是javascript代码。 http://www.kaotik.si/rotation1.html

我做错了什么?

代码的迭代部分:

for (var i = 0; i < tocke.length; i++) 
{
    px = tocke[i]["x"];
    py = tocke[i]["y"];
    r = tocke[i]["r"];
    g = tocke[i]["g"];
    b = tocke[i]["b"];

    theta = 0.1;
    ox = centerX;
    oy = centerY;
    px = Math.cos(theta) * (px-ox) - Math.sin(theta) * (py-oy) + ox
    py = Math.sin(theta) * (px-ox) + Math.cos(theta) * (py-oy) + oy
    tocke[i]["x"] = px;
    tocke[i]["y"] = py;

    draw_point(px,py,r,g,b,1);
}

修改:感谢您解决问题: 我确实必须改为:

theta = 0.1;
ox = centerX;
oy = centerY;
tmpX = Math.cos(theta) * (px-ox) - Math.sin(theta) * (py-oy) + ox
tmpY = Math.sin(theta) * (px-ox) + Math.cos(theta) * (py-oy) + oy
tocke[i]["x"] = tmpX;
tocke[i]["y"] = tmpY;
draw_point(px,py,r,g,b,1);

1 个答案:

答案 0 :(得分:4)

您在重新分配px 之前它会在py的计算中使用。