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に
を表示します長方形もピンク色で表示されます。コンポーネントが回転角度-45度でドラッグ中にサイズ変更を行っていることを覚えておいてください上端矩形の左下、右下および下端の位置は変更しないでください。したがって、図2のピンクの矩形は、の左、右、および下の座標はと同じになります。図1の緑の矩形。得られたと予想される矩形の比較は、黄色の矩形が期待される/必要を出している。図3において
図3に示されています。得られた矩形ピンク色ののは、の緑色の回転矩形と比較して上にシフトされ、回転角度はによって異なります。
- Iは、回転角= -45度実際の
- 境界(ませんリサイズ)長方形を有しています。
- 実際の(サイズ変更されていない)矩形の境界は、回転= -45度です。
- リサイズされた長方形の範囲。
- リサイズされた矩形の範囲は、回転= -45度です。
どのように黄色の長方形の境界/中心を計算するのですか?私のコンポーネントのサイズ変更を正しく実装できるようにするには?適用可能な数学があることを教えてください。
必要ポイント/座標はこの答えのすべての色はあなたのフィギュア3を参照してください。図3.
だけ回転ポイントで終わるだろう、 基本式は以下のとおりです。 X_ = X * COS(角度) - のy *罪(角度)。y_ = y * sin(角度)+ y * cos(角度)。 http://ja.wikipedia.org/wiki/Rotation_(mathematics) – user1410657