在HTML画布中旋转一个点

Rotating a point in HTML canvas

本文关键字:一个 HTML 布中 旋转      更新时间:2023-09-26

我正在尝试学习一些基本的矢量数学,但我似乎无法获得这种旋转点的方法。旋转矢量的大小正在按比例放大,我不知道角度的大小。

以下是相关功能。我在javascript/HTML画布上工作。

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

函数几乎正确,但您只是使用修改后的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)};
}