我想计算特定点(顶部和左侧)的旋转。这有点复杂。我知道原来的顶部和左边。然后添加缩放,然后计算旋转。
此刻我这样做。 (原始左:-350,原始顶部:-10,f1_scale:0.544444,旋转角度:-30deg)
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坐标是偏离的。
有人可以看到我做错了或者有人已经尝过这个吗?
谢谢。
答案 0 :(得分:0)
你需要理解它背后的数学。首先,请查看此图片http://prntscr.com/amd2it,其中:
(x0, y0)
是起点的坐标(x1, y1)
是轮换后的坐标(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 )
或者你可以使用毕达哥拉斯定理作为第二个值。
当我们理解这一点时,我认为将其翻译成代码并不会有问题。