2012-02-03 13 views
2

C++では、2Dで、レイ(1点と方向ベクトルで定義)と矩形(x、y、w、hで定義)の交点をどのように見つけることができますか? ?レイと矩形の交点

    ________ 
        |  | 
        |  | 
------------------|  | 
        |________| 

これはなしフレームベースのシミュレーションのためなので、私はこの問題に取り組む方法がかなりわかりません。

答えて

5

2Dの四角形= 4つの線分。

だからあなたの質問は、実際にある:How do I determine whether or not two lines intersect, and if they do, at what x,y point?

あなたはすべてのラインセグメントの交点を計算し、選択よりはAベクトルの原点ある|A-Xi|に基づいて1を閉じ、Xiがポイント交差していると||は、(ベクトルの長さを表し、 sqrt(A.x*Xi.x + A.y*Xi.y)の場合、距離を比較するだけで正確な番号は必要ない場合は、実際にsqrt()を使用する必要はありません。

+0

リンクされた質問は微妙に異なります。線は線分ではありません。また、これは明らかに、長方形が傾いていない特殊なケースです。w.r.t.主軸、つまり♢ではありません – MSalters

+0

@MSalters彼が必要とする正確な答えではないかもしれませんが、私は四角形の考え方は間違いなく2Dで行こうと思っています/外側の交差点)、これは彼が出発するのに最適な場所です。あなたがより良い解決へのリンクを持っているなら私は私の答えを更新することがうれしいです。 – Vyktor

+0

@MSaltersもし私の辞書が正しいなら、 'line =無限線分'(または '線分=境界線付きの線分 'を使いたい場合)、チェックは本当に簡単です: ' if((((p1.x> &&((p1.y> = xx)&&(p2.x <= xx)&&(p2.x> = xx) (p2.y = = xy))) '(私はインデックスが得られればいいと思う)、' p1'と 'p2'は長方形の線と 'x'は交点です – Vyktor

1

あなたの光線はy=px+qで定義されています。ボックスを{R,B,L=R+w,T=B+h}と定義すると、右端がy=pR+qに交差していることを意味します。左端がy=pL+q、下端がx=(B-q)/p、上端がx=(T-q)/pになります。

これらの交差点がボックスを定義する線分であることを確認するには、それぞれR <=x && x <= LB <= y && y <= Tをチェックする必要があります。

関連する問題