2017-03-16 17 views
0

私は次のゲームを作った:java交差2dobject

プレイヤーは自由に動き回って、壁から跳ね返る弾丸を撃つ。私はオート・エイミングを実装しようとしています。私は、プレーヤーの周りを回るラインを使ってこれを実装しようとしました。

今私が問題を抱えているのは、線が壁と交差する場所を計算することです。私はこれを行う方法が不明です。

2DRectangleではないため、getBounds()は使用できません。誰かが、壁と壁が交差する場所をどのように計算してその位置を返すかについて誰かが考えているなら、非常に役に立ちます。

+0

ここには魔法はありません。それを理解するために基本的な幾何学的な操作を行うだけです。 –

+0

@James_D線と二次元矩形の交点を計算する方法はありませんか?また、タンクからは360本のラインがあり、迷路には多くの壁があります。私は、ジオメトリの計算はここでのオプションとは思わない。 – Huz

+0

私はちょうど別のアプリケーションで同じ問題に取り組んだ。私はジオメトリクラスのこの部分を見逃していましたが、線分のパラメトリックフォームを使用するつもりです。いくつかの便利なstackoverflowスレッドのためのGoogleの "Javaセグメント線の交差点" – Jdman1699

答えて

0

ここで数学を行うだけです。

あなたの回線が(startX, startY)で開始し、終了が(endX, endY)であるとします。基本グレード学校のジオメトリを使用して、ライン上の任意の点(x,y)が式にもちろん

(y-startY)/(x-startX) = (endY - startY)/(endX - startX) 

を満たすその後、

(endY - startY)/(endX - startX) 

は、ラインのちょうど斜面なので、

slope = (endY - startY)/(endX - startX) 
を設定します

、次にあなたは

(y-startY)/(x-startX) = slope 

開始点(線の場合はstartXstartY)と角度を知っている方が便利です(slope = Math.tan(angle)のように)。

水平壁との交差の例では、壁の端のすべての点に同じY座標があります。wallYとします。だから、xはx座標交点のであれば、あなたが

x = startX + (wallY-startY)/slope 

に並べ替えることができます

(wallY-startY)/(x-startX) = slope 

を持っているので、交点は、最後の式のようx(x, wallY)です。

壁(すなわち、それは、Xポイントを開始および終了しました)有限である場合、その行は、実際に壁を交差するかどうかのチェックは、単にx >= wallStartX && x <= wallEndXで、wallStartXは、左の壁の端部と、wallEndX右端であると仮定すると。

壁が垂直の場合、壁にあるxの座標(たとえばx = wallX)を知っていて、yの座標を見つけたい場合を除き、基本的に同じです。したがって、第1(または第4)式のをxに置き換えて、yを解きます。

壁が水平でも垂直でもない場合、数学はもう少し複雑ですが、それほど複雑ではありません。 (読者のために残しておきます)

+0

毎回ランダムに生成される多くの線と、多くの縦と横の壁があります。また時には、線が同時に2つの水平壁を横切る場合もあります(下のものと上のもの)。あなたの方法はまだ適用可能でしょうか? – Huz

+0

確かに、上記の壁の場合、 'wallY'は壁の下端のy座標になり、' wallY'の下の壁は壁の上端のy座標になります。垂直壁の場合は同じ考えを繰り返しますが、 'wallX'を知っていて、' y'を見つける必要があります。明らかに、ループ内の各行、または必要なものの計算を行うことができます。 –

+0

したがって、垂直壁の方程式はどのように計算されますか?私はまだちょっと混乱しています – Huz

0

よくテストされたJTSライブラリを使用して、このようなことを行うことができます。