2016-05-15 2 views
0

私はスプライトの形でグラフィックを表示する大きなウィンドウを持っています。私は対処する必要がある問題があります:グラフィックスウィンドウを線で分割し、どちらの側にあるスプライトを伝える

このウィンドウに「壁」を描きたいとします。壁は垂直線と水平線のみで構成されます。例えば、壁は "階段"のように見えるかもしれませんが、文字 "L" "|"のように見えるかもしれません。 "_"この壁の終わり(開始と終了の両方)が壁またはグラフィックスウィンドウの端に接続されているとします。

ここで、どのスプライトがこの壁のどちら側にあるかを知りたいと思います。ウィンドウを壁で分けるたびに、どちらのスプライトがどちらの側で終わったのかを知りたい。

これについては、私が使用できるアルゴリズムまたは方法はありますか?

答えて

0

スプライト矩形のx座標とy座標を設定できます。水平と垂直の壁には、より大きいか小さい値を使用します。ここで詳述するように、スプライトに矩形を付け、rect.x属性とrect.y属性を設定し、それらを使用してスプライトを配置します。

対角線の壁では、xとyの両方をテストしてどちらの面が上かを確認する必要があります。

1

ベクトルのクロス積ポイントが言うと

ある側を見つけるためには、ポイントが残ったり、ラインやポイントの外積を得るラインの右側です。始点が原点になるように線を平行移動し、同じように点を移動する必要があります。次に、クロス積を取得し、値が負の場合は、値が0の場合はポイントを左に(反時計回りの方向に)、ポイントがライン上にある場合は値が正の場合はポイントが右になります(時計方向に)移動する。

このように順番に各コーナーをすることによってスプライトに適応しやすいライン

x1 = 100; // line start coord 
y1 = 100; 
x2 = 300; // line end coord 
y2 = 300; 

px = 300; // the point to test 
py = 100; 

// first translate the line and point so that the line start is at 0,0 
px = px - x1; 
py = py - y1; 
x2 = x2 - x1; // no need to move the start as dont need it after translation 
y2 = y2 - y1; 

// And now just the cross product 

cross = x2 * py - y2 * px; 
if(cross < 0){ // point is left of line 
if(cross > 0){ // point is right of line 
else { // point is on the line 

。以前のポイントよりも反対側にポイントがある場合は、スプライトがライン上にあり、それ以上のテストはできません。

クロス製品の詳細については、wiki

を参照してください。
関連する問題