获得旋转的顶部和左侧坐标

get rotated top and left coordinates

本文关键字:坐标 顶部 旋转      更新时间:2023-10-27

我想计算一个特定点(顶部和左侧)的旋转。这有点复杂。我知道原来的顶部和左侧。然后添加缩放,然后计算旋转。

现在我这样做。(原始左侧:-350,原始顶部:-10,f1_scale:0.544444,旋转角度:-30度)

function sin(x) {
  return Math.sin(x / 180 * Math.PI);
}
function cos(x) {
  return Math.cos(x / 180 * Math.PI);
}
function rotate(x, y, a) {
  var x2 = cos(a) * x - sin(a) * y;
  var y2 = sin(a) * x - cos(a) * y;
  return [x2, y2];
}
var scaledLeft = -350 * f1_scale;
var scaledTop = -10 * f1_scale;
var rotateOut = rotate(scaledLeft, scaledTop,-30);

这适用于左(x)坐标,但y坐标太远了

有人能看到我做错了什么吗?或者有人已经试过了吗?

谢谢。

你需要理解它背后的数学http://prntscr.com/amd2it其中:

  1. (x0, y0)为起点坐标
  2. (x1, y1)是旋转后的坐标
  3. (p, q)是旋转点的坐标

为了找到(x1, y1),你需要知道(p, q)的值,以及(x0,y0)和角度a。如果我们应用初等几何,我们得到:

sin(a)( q - y0 ) = q - y1
y1 = q - sin(a)( q - y0 )

cos(a)( p - x0 ) = p - x1
x1 = p - cos(a)( p - x0 )

或者你可以用毕达哥拉斯定理求第二个值。

当我们理解这一点时,我认为将其翻译成代码不会有问题。