Javascript 二维旋转围绕一个点旋转1000个随机点

Javascript 二维旋转围绕一个点旋转1000个随机点,javascript,math,rotation,2d,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代码。 我做错了什么 代码的迭代部分: for (var i = 0; i < tocke.length

我生成了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代码。

我做错了什么

代码的迭代部分:

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);
}

在计算
py

之前重新分配
px
如果px,py是旋转点,那么ox,oy?ox是什么,oy是我旋转1000点的点。它是常数,设置为500,500px和py是我要旋转的点的坐标,对于θ,我在循环中对所有1000个点都这样做。你不应该经常执行
sin
cos
,特别是因为它们的结果实际上是常数。如果px,py是旋转点,那么什么是ox,oy?ox,oy是我旋转1000点的点。它是常数,设置为500,500px和py是我要旋转的点的坐标,对于θ,我在循环中对所有1000个点都这样做。你不应该经常执行sin和cos,特别是因为它们的结果实际上是常数。差不多就是这样。为旧值或新值创建两个新变量,计算新值并将其分配回对象。无论哪种方式,都不要覆盖obj.x,然后在计算obj.y时使用新值。为旧值或新值创建两个新变量,计算新值并将其分配回对象。无论哪种方式,都不要覆盖obj.x,然后在计算obj.y时使用新值。
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);