ここで数学を行うだけです。
あなたの回線が(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
開始点(線の場合はstartX
とstartY
)と角度を知っている方が便利です(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
を解きます。
壁が水平でも垂直でもない場合、数学はもう少し複雑ですが、それほど複雑ではありません。 (読者のために残しておきます)
ここには魔法はありません。それを理解するために基本的な幾何学的な操作を行うだけです。 –
@James_D線と二次元矩形の交点を計算する方法はありませんか?また、タンクからは360本のラインがあり、迷路には多くの壁があります。私は、ジオメトリの計算はここでのオプションとは思わない。 – Huz
私はちょうど別のアプリケーションで同じ問題に取り組んだ。私はジオメトリクラスのこの部分を見逃していましたが、線分のパラメトリックフォームを使用するつもりです。いくつかの便利なstackoverflowスレッドのためのGoogleの "Javaセグメント線の交差点" – Jdman1699