2011-01-28 10 views
9

ライン(またはラインの任意のポイント)が矩形内にあるか、または矩形と交差しているかどうかをチェックします。ラインの任意のポイント(または一部)が内部にあるか、または矩形に接触するかどうかを確認する方法

私は(x0、y0)と(x1、y1)を1行の開始点と終了点として持っています。 また、長方形例えば

の左上と右下のポイントとして、(AX、AY)および(BX、によって)、

 ____________ 
    |   | 
---|-----  | Result: true 
    |   | 
    |____________| 

    /
    _/__________ 
|/   | 
/   |  Result: true 
/|   | 
|____________| 


    ____________ 
    |   | 
    | -------- | Result: true 
    |   | 
    |____________| ----------  Result: false 

誰もがこれを行う方法を提案することができますか?私はその点が何であるかを知りたいとは思っていません。私はその点があるかどうかを知りたいだけです。ヘルプ

+6

+1透明ASCIIアートの場合: – alex

+0

「Cohen Sutherland」のクイックグーグルは、あなたが正しい方向にスタートするはずです。 –

+0

各エッジを独自の線分として考えます。そしてそれは、線分の交点を決定することと、それが完全に包含されている場合です。もちろん、これは簡単な見解であり、このタイプの交差点を解決するための理想的な方法ではないでしょうか(これは実際の共通の交差点です - 元の質問であれば本当に驚いています;-) –

答えて

5

ため

どうもありがとう第一及び第三のケースは自明である - ラインのいずれかのエンドポイントがボックス(即ち> AXおよびAY、< BXによって)内にある場合、単純にtrueを返します。

2番目の問題は、私たちの回線のエンドポイントにはもう依存できません。この場合、矩形の各辺で線をテストする必要があります。

私たちの線の方程式は(x1 - x0)*x + (y1 - y0)*y + x0*y0 - x1*y1 = 0となり、角を使って矩形の各辺について同様の方程式を作ることができます。それに続いて、矩形の辺の方程式を私たちの線に代入すると、交差点が得られます。

最後に、ポイントが矩形の辺の範囲内にあり、同様に私たちが検討している線分内にあることを確認します。

this discussionには、これに関する詳細な説明があります。

+2

2)私にとっては正しいとは思わない。例えば、単位平方(0,0~1,1)対セグメント(-1,0) - (1,3)の場合を取る。 – Jimmy

+0

あなたはそうです!それは偽陽性を引き起こすでしょう。私は私の答えを更新します。 –

+0

こんにちは、ありがとうございました。 – user427969

関連する問題