1

回転させたい形状がいくつかあり、それらの間の距離を同じに保ちます。それを行う最良の方法は何ですか?選択した形状を囲む長方形の中心を計算し、その点と比較して形状を回転させることを考えていました

これは私のコードです

    while(iter.hasNext()  ){
        shape = (Shape)iter.next(); 
        anchor = getCenter();
        AffineTransform t =  shape.getAffineTransform();    
        t.rotate(Math.toRadians(thetaDegrees), anchor.x, anchor.y);         
        shape.setAffineTransform(t);

    }

ありがとう

4

4 に答える 4

1

私は前の2つの答えと一致します、回転は形で何も変えてはいけません。

注意点は、1つの形状を回転させる必要があり、原点から回転させることです。したがって、形状の各頂点は、共通の参照フレームに対して測定されます。

たとえば、2つの正方形AとBがある場合、両方とも長さの10単位です。1つの間違いは、ポイント(0、0)(0、10)(10、10)(10、0)を持つ2つのシェイプを作成することです。たとえば、正方形BがAの上にある場合、以前と同じように形状Aがありますが、形状Bは(0、10)(10、10)(20、10)、(10、10))です。これで、AとBの両方を回転させることができ、回転しても相対位置が維持されます(正しく思い出せば、回転は通常、参照(0,0)を使用します)

于 2011-03-09T23:32:32.383 に答える
1

原則として、回転は常に距離を維持する操作です (数学的に言えば、平行移動のようなアイソメであり、スケーリング操作やせん断操作とは異なります)。したがって、すべての図形を任意の点を中心に(同じ角度で) 回転させると、常に目的のプロパティが得られます。

于 2011-03-09T23:22:00.030 に答える
0

オブジェクトの初期状態 (つまり位置) を保持し、その保存された位置を回転に適用してから、オブジェクトが境界内にあるかどうかを確認する必要があります。それらが境界の外にある場合は、適切な距離で境界ボックスの中心に向かってそれらを移動する必要があります。

中心を中心に回転する円がない限り、回転は常にバウンディング ボックスを変更します (拡大または縮小)。そのため、元の参照を常に保持し、そこから変換する必要があります。

于 2011-03-10T00:42:17.333 に答える
0

すべてのオブジェクトを同じ点を中心に (そしてもちろん同じ角度で) 回転させる限り、任意の点を中心として選択できます。

一般的な選択肢は、境界ボックスの結合の中心、個々のオブジェクトの中心の平均、中心の面積加重平均などです。オブジェクトのグループ外の任意の点を中心に回転することもできます。それは、何よりも達成したいことに依存します。

于 2011-03-09T23:19:16.057 に答える