2

/ (プラスand )で始まり、回転先/を計算するこの優れた質問と回答を見つけました。この計算は完全に機能しますが、逆方向に実行したいと思います。/とから始めて、元の/とを計算したいと思います。xycenter x/ydegrees/radiansx'y'x'y'degrees/radiansxycenter 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'xycenter x/ydegrees/radians

しかし、図 B を解くには数学/コードが必要です。ここで、目的地x/ y(緑色の円) だけでなく、目的地center x/y(緑色の星) も、開始x/ y(灰色の円、おそらく必要ではありません)、目的地x'/ y'(赤い円)、および の既知の値から見つけることができますdegrees/radians

図AとB

上記のコードは、宛先x/ y(緑色の円) を介して解決します ( iDegrees * -1@andrew cook の回答のおかげで、彼によって削除されました) が、それを行うには、宛先の場所center x/y(緑色の星) を入力する必要があります) であり、以下の図 C でわかるように、これが現在不足している計算です。

ダイアグラムC

では、座標?/ ?(緑の星) nA(角度) およびx'/ y'(赤い円) をどのように見つけるのでしょうか?

4

1 に答える 1

0

逆変換を見つけようとしています。まず、平行移動 T と回転 R という 2 つの線形変換の構成から始めます。最初に R をベクトル x に適用し、次に T を適用すると、式は y = TRx になります。逆問題を解くには、TR の逆関数 (TR) -1が必要です。これは R -1 T -1に等しくなります。回転 R の逆は、角度の負の値による回転です(あなたが言及しています)。同様に、逆変換は元の変換に -1 を掛けたものです。したがって、答えは x = R -1 T -1 y です。

現在の状況では、角度によって回転が与えられますが、平行移動を計算する必要があります。必要になるとは思わなかった灰色の円が必要になります。灰色の円に回転 R (その逆ではない) を適用します。この点を赤い円から引きます。これが元の翻訳 T です。符号を逆にして T -1を取得します。

于 2012-11-04T17:39:16.093 に答える