2012-10-17 33 views
7

Surfaceviewとキャンバスの描画を使用してAndroidでカスタムコンポーネントを作成しようとしています。これらのコンポーネントは、タッチすることによってサイズ変更および回転が可能です。必要なエッジをタッチしてドラッグすると、上、右、下、左のエッジがスケーラブルであるイメージビューを作成することを検討してください。私はRectFを使用してコンポーネントの境界を維持しています。回転についてはcanvas.rotate(angle, bounds.centerX(),bounds.centerY())メソッドを使用しています。問題は、上端のサイズを変更する際に、Let、Right、Bottomのエッジを固定する必要があり、回転角度が0度以外の場合は修正できません。実際の矩形の境界に関して回転した矩形のx、y座標を調べるには数学的な解が必要です。回転角度を基準とした長方形の座標

私はいくつかの画像の助けを借りてそれを説明することができます。 次の図は、それぞれの色が既知で表示されている2つの矩形を表示しています。 緑の矩形をコンポーネントの初期範囲として考えます。 -45度回転し、Centerは(10,10)です。今矩形の上端再サイズに行くと、Y位置が回転6から4に減少されることが理解される。図2から次の図2に

Figure 1

を表示します長方形もピンク色で表示されます。コンポーネントが回転角度-45度でドラッグ中にサイズ変更を行っていることを覚えておいてください上端矩形の左下、右下および下端の位置は変更しないでください。したがって、図2のピンクの矩形は、の左、右、および下の座標と同じになります。図1の緑の矩形。得られたと予想される矩形の比較は、黄色の矩形が期待される/必要を出している。図3において

Figure 2

図3に示されています。得られた矩形ピンク色ののは、の緑色の回転矩形と比較して上にシフトされ、回転角度はによって異なります。

  • Iは、回転角= -45度実際の
  • 境界(ませんリサイズ)長方形を有しています。
  • 実際の(サイズ変更されていない)矩形の境界は、回転= -45度です。
  • リサイズされた長方形の範囲。
  • リサイズされた矩形の範囲は、回転= -45度です。

どのように黄色の長方形の境界/中心を計算するのですか?私のコンポーネントのサイズ変更を正しく実装できるようにするには?適用可能な数学があることを教えてください。

必要ポイント/座標はこの答えのすべての色はあなたのフィギュア3を参照してください。図3.

Figure 3

+0

だけ回転ポイントで終わるだろう、 基本式は以下のとおりです。 X_ = X * COS(角度) - のy *罪(角度)。y_ = y * sin(角度)+ y * cos(角度)。 http://ja.wikipedia.org/wiki/Rotation_(mathematics) – user1410657

答えて

0

でレッド色の円としてマークされています。

私があなたの質問を正しく理解していれば、ピンク色の矩形と緑色の矩形に関するすべての詳細を計算する方法を知っています。ピンク色の矩形の1つのコーナーと緑色の矩形の対応するコーナーの差を取るだけです。ピンクの矩形の中心にその差異(2要素のベクトル、つまりxyの差を追加)をピンクの矩形の中心に追加すると、黄色の三角形の中心が表示されます。

ピンク色の矩形の寸法も計算する必要がある場合は、回転していない座標系で行うことができます。緑の矩形を、矩形を伸ばしたい点の座標と一緒に持ち、+ 45°回転させます。次に、矩形の高さを希望の値に拡張すると、青色の長方形が得られます。回転すると、ピンク色の長方形になります。

1

キーはこれです:「回転角度が0度以外の場合は修正できません」

長方形が10度回転しているとします。

1)マウスは-10度

2により画面上のいくつかの点を中心座標回転)が-10度

によって矩形の中心を回転...今はに問題を低減しました0度にある長方形。矩形は移動しました。はい、マウスは動いていましたが、それらは互いにすべきです。

3)ここで矩形の操作を行います。長方形の中心が移動します。

4)は、10度

によって、あなたはそれについて考える必要はありません、あなたは常に非回転座標で作業している。この方法は、新たな矩形の中心を回転させます。角度aによって回転[x, y]

ポイントが[x*cos(a) - y*sin(a), x*sin(a) + y*cos(a)]

関連する問題