在 HTML canvas 中旋转一个点

Rotating a point in HTML canvas

我正在尝试学习一些基本的矢量数学,但我似乎无法使用这种旋转点的方法。旋转矢量的幅度在按比例增大,我不知道角度有什么问题。

这是相关函数。我在 javascript/HTML canvas.

工作
function rotate(point, center, angle) {
  var theta = (Math.PI / 180) * angle,
      cX = center.pos.x,
      cY = center.pos.y,
      pX = point.pos.x,
      pY = point.pos.y,
      pCos = Math.cos(theta),
      pSin = Math.sin(theta),
      x = pX - cX,
      y = pY - cY;
  x = (x * pCos - y * pSin) + cX;
  y = (x * pSin + y * pCos) + cY;
  return {x: Math.floor(x), y: Math.floor(y)};
}

这是一个jsbin of the weird result

函数几乎正确,但你只是使用修改后的 x 值来计算 y

function rotate(point, center, angle) {
  var theta = (Math.PI / 180) * angle,
      cX = center.pos.x,
      cY = center.pos.y,
      pX = point.pos.x,
      pY = point.pos.y,
      pCos = Math.cos(theta),
      pSin = Math.sin(theta),
      x = pX - cX,
      y = pY - cY;
  /* You had
  x = (x * pCos - y * pSin) + cX; // you change x on this line
  y = (x * pSin + y * pCos) + cY; /// then used the modified x to get y
  */
  // this will fix the problem
  var xx = (x * pCos - y * pSin) + cX;
  var yy = (x * pSin + y * pCos) + cY;
  return {x: Math.floor(xx), y: Math.floor(yy)};
}