3

それは私が数学で恐ろしいことだと述べることから始めましょう。

長方形の位置を変えて回転させようとしています。ただし、0,0ではなく、座標がどれだけシフトしたかに応じて、長方形を回転させる必要があります。それはあまり意味がないと確信しているので、必要なものを説明するのに役立つスケッチをいくつか作成しました。

代替テキスト

上の画像は、0%から100%に移動する赤い長方形の3つの段階を示しています。赤い長方形のX座標とY座標(赤い長方形の左上)は、青い長方形の高さのパーセンテージのみを移動します。

代替テキスト

赤い長方形は回転できます。上から見た真ん中の例(「距離-50%」)のみに注目すると、赤い長方形が青い長方形の高さの-50に再配置され、上の画像の新しい角度は-45°になります。0、0ポイントから回転しています。

代替テキスト

今、私の問題は、その回転点がその位置を反映するようにしたいということです。

赤と青の長方形は同じサイズですが、幅と高さが反対です。赤い長方形の0,0座標は、青い長方形の高さの-50%になり、幅と高さが反対になるため、回転点を赤い長方形の幅の50%(または青い長方形の50%)にします。高さ、これは同じことです)。

赤い長方形にその幅の50%で回転するように具体的に指示するのではなく、私が望むことを行うために、回転点が反映するように赤い長方形のX座標とY座標を配置する式を使用してそれをエミュレートする必要がありますその位置。

4

5 に答える 5

4

とても簡単です。

1.長方形を回転させたい点、つまり、長方形を回転させても動かない回転​​点( RP )に落ち着きましょう。下の図では、ポイントがひし形で表されていると仮定します。

代替テキスト

2. RP(0,0)になるように、4つのポイントを移動します。その点の座標が(RP x、RP yであると仮定すると、長方形の4つの角すべてをそれらの座標で減算します。

代替テキスト

3.回転行列を使用してポイントを回転します(これにより、ポイントが原点を中心に反時計回りに回転します。これは、前の変換のおかげで回転ポイントになりました)。

代替テキスト

次の図は、反時計回りに45°回転した長方形を示しています。

代替テキスト

4.長方形を平行移動します(4つのポイントすべて にRPを追加します)。代替テキスト

私はこれがあなたが望むものだと思います:)

于 2010-06-20T03:32:19.253 に答える
4

これがあなたの問題に対する図解された解決策です:

中心から外れた回転から位置デルタを決定する方法。

于 2010-06-20T01:54:30.697 に答える
3

何が必要か正確にはわかりませんが、任意の点を中心に長方形を回転させる手順が役立つようです。

原点(0,0)を中心に点(x、y)dラジアンを回転させたいとします。回転した点の位置の式は次のとおりです。

x' = x*cos(d) - y*sin(d)
y' = x*sin(d) + y*cos(d)

ここで、原点を中心に回転するのではなく、特定の点(a、b)を中心に回転します。最初に原点を(a、b)に移動し、次に上記の回転式を適用してから、原点を(0,0)に戻します。

x' = (x-a)*cos(d) - (y-b)*sin(d) + a
y' = (x-a)*sin(d) + (y-b)*cos(d) + b

これは、点(a、b)を中心に点(x、y)dラジアンを回転させるための式です。

問題の場合、(a、b)は青い長方形の右側の中間点になり、(x、y)は赤い長方形の隅々になります。この式は、回転した赤い長方形の角の座標に(x'、y')を与えます。

于 2010-06-20T01:26:07.560 に答える
0

最初はもっと巧妙なポジショニングを行うことで、より複雑な回転を回避できるように思われますか?たとえば、最後の例では、赤いボックスを「-25%青の高さ」と「-25%赤の高さ」に配置します(参照スキームに従っている場合)。次に、必要な回転を実行します。

于 2010-06-20T01:27:25.417 に答える
0

回転した長方形の側面にある原点Oと点Pがわかっている場合は、2つの間のベクトルを計算できます。

代替テキスト
(出典:equationsheet.com

このベクトルで内積を取ることにより、ベクトルとx軸の間の角度を取得できます。

代替テキスト
(出典:equationsheet.com

これを前提として、回転行列を掛けることにより、長方形上の任意の点を変換できます。

代替テキスト
(出典:equationsheet.com

于 2010-06-20T01:20:40.927 に答える