Javascript (未)旋转矩形上的点

Javascript (未)旋转矩形上的点,javascript,algorithm,geometry,bounding-box,Javascript,Algorithm,Geometry,Bounding Box,我找到了以x/y(加上中心x/y和度/弧度)开头的值,并计算旋转到x'/y'的值。这个计算很完美,但我想反方向运行它;从x'/y'和度/弧度开始,我想计算原始x/y和中心x/y (x', y') = new position (xc, yc) = center point things rotate around (x, y) = initial point theta = counterclockwise rotation in radians (radians = degrees * Pi

我找到了以
x
/
y
(加上
中心x/y
度/弧度
)开头的值,并计算旋转到
x'
/
y'
的值。这个计算很完美,但我想反方向运行它;从
x'
/
y'
度/弧度
开始,我想计算原始
x
/
y
中心x/y

(x', y') = new position
(xc, yc) = center point things rotate around
(x, y) = initial point
theta = counterclockwise rotation in radians (radians = degrees * Pi / 180)
dx = x - xc
dy = y - yc

x' = xc + dx cos(theta) - dy sin(theta)
y' = yc + dx sin(theta) + dy cos(theta)
或者,在JavaScript/jQuery中:

XYRotatesTo = function($element, iDegrees, iX, iY, iCenterXPercent, iCenterYPercent) {
    var oPos = $element.position(),
        iCenterX = ($element.outerWidth() * iCenterXPercent / 100),
        iCenterY = ($element.outerHeight() * iCenterYPercent / 100),
        iRadians = (iDegrees * Math.PI / 180),
        iDX = (oPos.left - iCenterX),
        iDY = (oPos.top - iCenterY)
    ;

    return {
        x: iCenterX + (iDX * Math.cos(iRadians)) - (iDY * Math.sin(iRadians)),
        y: iCenterY + (iDX * Math.sin(iRadians)) + (iDY * Math.cos(iRadians))
    };
};
上面的数学/代码解决了图A中的情况;它根据
x
/
y
(红圈)、
中心x/y
(蓝星)和
度/弧度的已知值,计算目的地
x'
/
y'
(绿圈)的位置

但我需要数学/代码来解决图B;在这里,我不仅可以从起点
x
/
y
(绿色圆圈)的已知值中找到目的地
中心x/y
(绿色星星)(灰色圆圈,但可能不需要),还可以从起点
x
/
y
(红色圆圈)的已知值中找到目的地
x'
/
y'
度/弧度

上面的代码将通过
iDegrees*-1
(感谢@andrew cooke的答案,该答案已被他删除),解决目的地
x
/
y
(绿色圆圈))的问题,但为了解决这个问题,我需要将目的地
中心x/y
(绿色星星)的位置输入其中,这就是我目前缺少的计算,如下图C所示:


所以。。。如何找到给定的
n
A
(角度)和
x'
/
y'
(红色圆圈)的坐标
/
(绿色星星)?

您试图找到一个逆变换。首先合成两个线性变换,一个平移T和一个旋转R。首先将R应用于向量x,然后将R应用于向量T,因此表达式为y=TRx。要解决反问题,你需要TR的倒数,写成(TR)-1,等于R-1T-1。旋转R的倒数就是旋转角度的负数(你提到的)。同样,翻译的倒数是原始翻译乘以-1。所以你的答案是x=R-1T-1y


在你现在的情况下,你可以通过它的角度得到旋转,但是你需要计算平移。你需要灰色的圆圈,这是你认为你不需要的。将旋转R(不是其逆方向)应用于灰色圆。从红色圆圈中减去该点。这是原始翻译T。反转符号得到T-1。

您正在尝试找到一个逆变换。首先合成两个线性变换,一个平移T和一个旋转R。首先将R应用于向量x,然后将R应用于向量T,因此表达式为y=TRx。要解决反问题,你需要TR的倒数,写成(TR)-1,等于R-1T-1。旋转R的倒数就是旋转角度的负数(你提到的)。同样,翻译的倒数是原始翻译乘以-1。所以你的答案是x=R-1T-1y

在你现在的情况下,你可以通过它的角度得到旋转,但是你需要计算平移。你需要灰色的圆圈,这是你认为你不需要的。将旋转R(不是其逆方向)应用于灰色圆。从红色圆圈中减去该点。这是原始翻译T。反转符号得到T-1