javascript - 如何在旋转javascript后获取裁剪坐标

标签 javascript math

我需要在旋转后保留坐标信息,并且正在为必要的数学而苦苦挣扎。

我有一张图片,带有特定的裁剪坐标。这些坐标作为以下对象给出:

{
      h:  139.68333435058594,
      w:  139.68333435058594,
      x:  60.31666564941406,
      x2: 200,
      y:  80,
      y2: 219.68333435058594
}

然后我旋转这个图像(它是一个 Canvas 元素),但我希望新坐标能够准确地反射(reflect)旋转,保持原始裁剪完好无损。

例如如果选择了 400x400 图像的左上四分之一,则返回的坐标将为 x:0、y:0、x2:200、y2:200。向左旋转 -90 度时,新坐标应为:x:0, y:200, x2:200, y:400。

我该如何编写一个函数来计算这些新坐标?

非常感谢。

为了帮助正确地形象化这个问题,我提供了一张快速图片:

enter image description here

编辑: 上图中的大方 block 是我正在旋转的照片。它绕着它的中点旋转,裁剪坐标是相对于图像本身的。旋转时,在重新计算新坐标之前重置实际坐标平面,这意味着图像/容器的左上点将始终为 0,0。

最佳答案

此函数使用 Rotation Matrix算法

function rotate(x, y, xm, ym, a) {
    var cos = Math.cos, sin = Math.sin,
    a = a * Math.PI / 180, // Convert to radians 
    // Subtract midpoints, so that midpoint is translated to origin
    // and add it in the end again
    xr = (x - xm) * cos(a) - (y - ym) * sin(a)   + xm,
    yr = (x - xm) * sin(a) + (y - ym) * cos(a)   + ym;

    return [xr, yr];
}

alert(rotate(0, 0, 200, 200, -90));​ // 0,400

JSFiddle

关于javascript - 如何在旋转javascript后获取裁剪坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604174/

相关文章:

javascript - GAS withSuccessHandler 适用于某些功能,但不适用于其他功能

algorithm - 在不拆分为单独的 RGB 字节的情况下计算 24 位颜色之间的差异?

algorithm - 确定浮点平方根

algorithm - 确定排序数组中的任何数字是否为 `x` 的倍数的最快算法是什么?

javascript - 使用 navigator.mediaDevices.getUserMedia 录制浏览器音频

javascript - 如何在ajax成功函数中调用函数方法?

javascript - 如何使 'click' 事件在 div 下工作

javascript - 为什么我们不能将 document.querySelector 方法分配给另一个变量并使用它?

c - C中的高精度除法

python - python中非常小的指数