1

screenshot of cropbox inside rotated imageアルゴリズム - 私はあなたが回転し、画像を切り抜くことができます画像エディタプロジェクト、に取り組んでいます

回転した矩形の内側に長方形の検出を打ちます。

私が現在直面している問題は、イメージを回転させると、回転したイメージの境界内のどこにでもクロップボックスをドラッグできるようにすることです。これまでのところ、私はLiang-BarskyCohen-SutherlandラインクリッピングアルゴリズムとSeparating Axis Theoremを見てきましたが、私がどのように私の使用事例のためにこれらを実装することができないか分かりません。

誰でも正しい方向に向けることができますか?私は間違った木を吠えますか?

+2

チェック内側の長方形のすべての四隅には、外側の長方形内にあるかどうか。 – alain

+0

素朴な方法は、小さな矩形の各線分をチェックして、それが大きな矩形のどの線分と交差するかを調べることです。あなたは回転した四角形の点を持っています(あなたが回転角度を知っていると仮定して)、それはちょうど16行の交差点テストです。最適ではありませんが、それはスタートです。選択矩形の左側が回転した矩形の右側と交差しないようにいくつかの仮定を行うことができれば、行う必要のあるテストの数を減らすことができます。 –

答えて

2

Alainのコメントを使用してください。コーナーの内在性をチェックするには、画像を逆回転させて、そのエッジを軸に整列させるだけで十分です。それでは、軸上の軸合わせボックスの問題が簡単になります。

enter image description here

(私はあなたが本当に画像、ジオメトリだけを回転させるために持っていることを意味するものではありません。)

+0

ありがとう、これは独創的です:)私はちょうど4つのコーナーがすべてボックスに入っているかどうかを確認することができます。すばらしいです! – daviestar

+0

集中?どういう意味ですか ?これは0.1マイクロ秒以下でなければならない。 –

+0

javascriptの本来のtrig関数は遅くなる可能性があるので、あなたの答えは戦略的に(mousedown上で)キャッシュし、60fps(mousemove上)で起動させることはできません。 – daviestar

0

ユーザが作成しようとする動きが[dx、dy]の場合、選択範囲のコーナーから[dx、dy](次の例の黄色の線)で変換された点までを考慮してください。これらの線は、ある点(赤い点)で回転した画像の境界(緑の線)と交差することがあります。交差点がない場合、動きは合法です。 1つ以上の交差点がある場合、これらは、移動が合法的であったポイントまであなたに教えてくれます。 (この例では、右下の角)を決定します。これは、元の位置に最も近い交点(水平または垂直距離を確認するだけで十分です)を決定します。この時点で翻訳を制限することができます。これによって

translation of rectangular selection

は、運動の方向は、あなたがコーナーの1(例では左下隅)をチェックスキップすることができます(例では右上に向かって)にある四分円。他のコーナーは常に境界に突き当たります。
また、動きの方向と画像の回転角度を比較することで、2つの境界(この例では左下)をスキップすることもできます。
したがって、3つの線分と2つの線分の交点を確認する必要があります。線分交差点コードについては、例えば、 this question

ユーザーが片面だけをドラッグし、移動する代わりに長方形を延長する場合は、移動している2つのコーナーを確認するだけです。

+0

@daviestarあなたは最後の法的立場を知ることは有用だと思いませんか?それともイブの答えに比べて不必要に複雑であると思うのですか? – m69

関連する問題