旋转向量时的错误,会创建新的向量,并通过调整旋转



我在以下代码中有一个奇怪的错误。向下滚动以查看图像以参考此问题。下图中发现的程序使用JavaScript在画布中绘制,因此请注意X和Y坐标都是正的,因此Y坐标相对于图形倒置。

let rotateVectors = (vs, t) => {
      return sortVectors(Object.keys(vs).map(v => {
        console.log(vs[v].vector.direction);
        let rateOfRotation = -.01 * (Math.random() * (5-1)+1);
        let vector = vs[v].vector
        let p = vector.magnitude;
        let c = vector.coords;
        let x = c.x*Math.cos(rateOfRotation) - c.y*Math.sin(rateOfRotation);
        let y = c.x*Math.sin(rateOfRotation) + c.y*Math.cos(rateOfRotation);
        return vector(cartesian2dCoordinate(x,y))
      }));
    }

上面的方法在循环中调用以慢慢旋转向量,以一定的随机量,地图函数返回a new vector ,它采用x,y坐标或2D笛卡尔对描述了向量的上升和运行。

旋转向量返回所有向量的分类列表(在VS对象中以度为单位的角度分类)。

let vectorDirection = (c) => {
  //THE ZERO VECTOR
  if(c.x === 0 && c.y === 0) return 0;
  //cardinal directions, vertical and horizontal
  else if(c.x === 0) return c.y > 0 ? .5 : 1.5;
  else if(c.y === 0) return c.x > 0 ? 0:Math.PI;
  //q3
  else if(c.x< 0 && c.y < 0) return (1+ (Math.atan(-1*((c.y * -1) / c.x))));
  //q2
  else if(c.x < 0 && c.y > 0) return (Math.PI / 180)*(180 + toDegrees(Math.atan((c.y * -1)/c.x)));
  //q4
  else if(c.y < 0 && c.x > 0) return  (Math.PI / 180)*(toDegrees(Math.atan((c.y * -1)/c.x)));
  //q1
  else return Math.atan(c.y*-1/c.x);
}

此函数返回基于其象限的矢量角度的弧度。

遍历区域1

在图像一中,任何给定的向量都将从标记为红色标记的x平面旋转,一直到-y垂直柱。s-> e。

遍历2,反向方向

在图像二中,矢量神奇地从E平面传播到S平面,并沿相反的方向传播。s-> e,因此向量传送回image1中的-x平面" s"。

我对用向量绘制东西相对较新。我记得学校里有些触发,但是很长一段时间以来我都没有使用过它。有人有一个想法吗?在这里可能发生什么?为什么我的向量会传送,改变方向,为什么没有向量横穿图像2的s左侧的空区,而从图像1的s下向下?

感谢Samgak在评论中的答案。我用此代码替换了原始的Vectordirection函数。它可以按预期工作。向量朝着预期的方向旋转,并以预期的速率旋转。

let vectorDirection = (c) => {
//THE ZERO VECTOR
  if(c.x === 0 && c.y === 0) return undefined;
  else return Math.atan2(-1*c.y,c.x)
}

最新更新