在HTML画布中旋转一个点

时间:2016-07-25 12:42:01

标签: javascript canvas vector rotation transformation

我试图学习一些基本的矢量数学,但我似乎无法通过这种方法来旋转一个点来工作。旋转矢量的幅度正在扩大,我不知道该角度是什么。

这是相关功能。我在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 of the weird result

1 个答案:

答案 0 :(得分:1)

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